首页 > 解决方案 > 如何在 DirectX 中为像圆柱体这样的 3D 对象实现几何着色器?

问题描述

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

标签: c++directx-11hlslgeometry-shader

解决方案


Direct3D 的几何着色器阶段并非旨在生成完整的几何体(如圆柱体),也不是真正为 Tessellation 设计的。

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

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

GS 的主要价值是处理邻接信息,或者进行基于人脸的计算,例如在不复制顶点的情况下实现经典的“平面着色”。几何着色器在进行非真实感渲染时非常有用。GS 阶段还可以使用 Stream Out 执行一些有趣的技巧,并控制管道中的多渲染目标选择。

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

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


推荐阅读