4

所以我想画很多四边形(甚至立方体),偶然发现了这个可爱的东西,叫做几何着色器。

我现在有点明白它是如何工作的,我可能会操纵它为顶点缓冲区中的每个顶点绘制一个立方体,但我不确定这是否是正确的方法。几何着色器发生在顶点着色器和片段着色器之间,因此它作用于屏幕空间中的顶点。但我需要它们在世界空间中进行转换。

那么,是否可以让我的顶点着色器简单地将输入通过管道传输到几何着色器,并在创建图元后让几何着色器乘以 modelviewproj 矩阵?统一着色器架构应该没问题,但是让顶点着色器变得多余我还是觉得恶心。

有替代品吗?或者这真的是“正确”的做法吗?

4

1 回答 1

3

完全没问题。

除此之外,考虑使用带有顶点属性除数 ( ) 的实例渲染 ( glDrawArraysInstanced, )。这样你就可以在完全没有几何着色器的情况下完成相同的任务。glDrawElementsInstancedglVertexAttribDivisor

例如,您可以有一个规则的立方体几何边界。然后,您有一个特殊的顶点属性,其中包含每个实例所需的立方体位置。您应该将它与除数 = 1 绑定,这将使它为每个绘制的实例推进。然后使用 绘制立方体glDraw*Instanced,指定实例数。

您还可以使用gl_VertexIDgl_InstanceID坐标从纹理中采样输入数据。

于 2011-02-14T19:37:54.613 回答