4

因此,到目前为止,我认为 GLSL 几何着色器在输入顶点由投影/模型视图矩阵转换后工作。换句话说,几何着色器在剪辑坐标上处理事物。

如果我要使用几何着色器将 GL_POINTS 转换为例如由 GL_POINTS 制成的立方体GL_TRIANGLES怎么办?在剪辑坐标上计算事物时,生成的形状似乎总是面向您/忽略旋转/缩放等。

此外,似乎GL_TRIANGLES不支持将其作为可能的几何输出类型之一。但无论如何我都试过了,它似乎奏效了。我想这取决于视频卡?如果GL_TRIANGLES不支持,是否可以制作立方体?在空格之间制作零宽度三角形条可能?

4

1 回答 1

5

您正在使用着色器:几何着色器适用于顶点着色器传递给它们的任何东西。如果您希望它是剪辑空间值,那么几何着色器将处理剪辑空间值。如果您的顶点着色器将眼睛空间值传递给它们,那么几何着色器必须对眼睛空间值起作用。

重要的是最终的预光栅化着色器阶段输出到gl_Position. 就是同质剪辑空间中需要的内容。后面有几何着色器的顶点着色器甚至不需要写入gl_Position.

此外,似乎不支持 GL_TRIANGLES 作为可能的几何输出类型之一。

您必须使用 ARB_geometry_shader4,而不是实际的核心几何着色器功能。如果可以的话,您可能应该避免使用该扩展名。任何具有几何着色器的硬件都可以运行 OpenGL 3.2。

在任何情况下,核心功能都不支持将三角形作为输出。它支持点、线带和三角形带。

如果不支持 GL_TRIANGLES 是否可以制作立方体?

这就是 EndPrimitive() 的用途。当你完成一个原语时调用它;没有什么能阻止你发出第二个原语。或第三。

此外,您应该被告知这可能会很慢。几何着色器不以快速渲染性能着称。

于 2011-06-30T02:21:12.763 回答