如何在 DirectX 中为圆柱体等 3D 对象实现几何着色器?

How to implement Geometry Shader in DirectX for a 3D object like Cylinder?

我需要有关如何在圆柱体上实现几何着色器以及 [maxvertexcount()] 的值的帮助, 我们是否需要在 ModelClass 中提供顶点和索引的值?

Direct3D 的几何着色器阶段并非旨在生成像圆柱体这样的完整几何体,也不是真正为曲面细分设计的。

https://docs.microsoft.com/en-us/windows/uwp/graphics-concepts/geometry-shader-stage--gs-

您可以做一些少量的放大,但通常当您跳过 GS 阶段或输出与输入相同数量的顶点时,硬件实现效果最佳。与其他方法相比,即使是 GS 的初始 'use cases',例如从单个输入点生成点精灵(四边形),也被证明是相当低效的。

GS 的主要价值是处理邻接信息,或进行基于面的计算,例如在不复制顶点的情况下实现经典 'flat-shading'。 Geometry Shader 在做 Non-Photorealistic Rendering 时非常有用。 GS 阶段还可以使用 Stream Out 和控制管道中的多渲染目标选择来做一些有趣的技巧。

https://npr-art.blogspot.com/2009/07/geometry-shader-silhouettes.html

如果要生成圆柱体,最好的选择是在 CPU 上构建它。请参阅 DirectX Tool Kit 中的 GeometricPrimitive