Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 所有顶点的公共变量_Opengl_Glsl - Fatal编程技术网

Opengl 所有顶点的公共变量

Opengl 所有顶点的公共变量,opengl,glsl,Opengl,Glsl,是否可以在顶点着色器中为顶点中的所有顶点维护单个变量。 我的意思是,访问第一个顶点时变量的更新应该反映在访问第二个顶点时….您需要在着色器中声明统一变量,如: uniform vec3 lightDir; 然后将C/C++中的值传递到: glUseProgram(shader_id) GLint location = glGetUniformLocation(shader_id, "lightDir"); if(location != -1)glUniform3f(location,

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

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

uniform vec3 lightDir;
然后将C/C++中的值传递到:

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


您可以在几何体着色器(gl_VerticesIn的循环)中迭代顶点,并设置逐顶点数据

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


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

更新?哈哈哈(无意冒犯)那么你想要的是有许多顶点都有相同的数据?所以当你改变一个,所有的都改变了?如果是这样的话,我可以问一下有什么意义吗?有制服,它们是。。。在所有顶点上保持一致,但必须从着色器外部设置它们。我不知道你想做什么,但这听起来很可疑,你可能需要一个几何体着色器。“制服之所以这样命名,是因为它们不会在特定的渲染调用中从着色器程序的一次执行更改到下一次执行。”如果他试图在顶点之间更新此变量,那么制服对他来说不起作用。嗯,是的。不确定他想做什么,但他可以在几何体着色器中迭代顶点并设置一些逐顶点数据。