GLSL 几何着色器和投影矩阵

kam*_*iro 4 opengl glsl geometry-shader

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

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

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

Nic*_*las 6

您正在使用着色器:几何着色器对顶点着色器传递给它们的任何内容起作用。如果您希望将其作为剪辑空间值,则几何着色器将作用于剪辑空间值。如果您的顶点着色器向它们传递眼空间值,则几何着色器必须处理眼空间值。

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

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

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

无论如何,核心功能不支持三角形作为输出。它支持点、线带和三角形带。

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

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

另外,应该提醒您,这可能会很慢。几何着色器并不以快速渲染性能而闻名。