-1

是否可以为顶点着色器中的顶点中的所有顶点维护单个变量。我的意思是在访问第一个顶点时更新变量应该在访问第二个顶点时反映出来......

4

2 回答 2

2

考虑顶点着色器的方式是所有顶点的所有着色器或多或少同时运行,至少在硬件可以支持的范围内。

因此,“在访问第一个顶点时更新变量应该在访问第二个顶点时反映”的整个想法是没有意义的——第二个顶点可能最终在第一个顶点之前被处理。

于 2012-05-10T17:20:04.973 回答
0

您需要在着色器中声明统一变量,例如:

uniform vec3 lightDir;

然后从那里传递 C/C++ 的值:

glUseProgram(shader_id)
GLint location = glGetUniformLocation(shader_id, "lightDir");
    if(location != -1)glUniform3f(location, x,y,z);

编辑:

您可以在几何着色器(gl_VerticesIn 的循环)中迭代顶点,并设置每个顶点的数据。http://www.lighthouse3d.com/tutorials/glsl-core-tutorial/geometry-shader-examples/

于 2012-05-10T14:22:15.340 回答