如何在 OpenGL 4 的着色器中设置 gl_Vertex?

Flu*_*upp 4 opengl shader glsl vertex-shader fragment-shader

我读了很多关于 OpenGL 4 中与 OpenGL 1 相比的新概念的内容。我的问题是,在旧的 GLSL 中,我可以使用预定义的 gl_Vertex 在我的顶点着色器中进行开箱即用的计算。但在当前的 4.1 版本中,这一点已被删除。

关于这一点有很多问题,但没有人给出如何在着色器中实际使用旧的 gl_Vertex 的示例。我发现了一些可能性,例如layout (location = 0) in vec3 vertexpos;glBindAttribLocation(shader, 0, "vertexpos");。但没有任何地方解释我从哪里获得当前顶点位置存储在哪个索引中的知识。实际上,我发现这个网站有索引,但这似乎不适用于上述代码片段。

也许有人可以在黑暗中带来光明并展示一个很小的例子。

kel*_*tar 5

gl_Vertex不再可用的原因是预定义的属性已被删除。过去glVertexPointer- 现在必须使用 手动将其设置为用户定义的命名属性glVertexAttribPointer。着色器无法知道什么数据属于什么属性 - 因为它只是数字;然而,如何处理这些数字取决于程序员。

因此,您必须定义至少一个属性(例如vertexpos,如您的示例中所示 - 但名称几乎可以是任何内容),获取属性位置(glGetAttribLocation或使用location说明符分配默认位置)将符号名称转换为属性槽号,然后分配属性数组与glVertexAttribPointer.