2012-05-10 41 views
-1

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

+1

_updation_?哈哈哈(没有冒犯性) – Shahbaz

+0

所以你想要的是有很多顶点都有相同的数据?所以当你改变一个时,所有这些都改变了?如果是这样,请问有什么意义? – Shahbaz

+1

有制服,它们在所有顶点之间是均匀的,但是你必须从着色器外面设置它们。我不确定你想要做什么,但这听起来像是一个可怕的方式来做到这一点,你可能需要一个几何着色器。 – andyvn22

回答

2

思考顶点着色器的方法是所有顶点的着色器或多或少同时运行,至少在硬件可以支持的情况下运行。

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

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/

+1

“制服之所以如此命名,是因为它们在特定的渲染调用中不会从着色器程序的一次执行更改为下一次。”如果他试图在顶点之间更新这个变量,那么Uniform将不适合他。 – luke

+0

呵呵,是的。不知道他想做什么,但他可以迭代几何着色器中的顶点并设置一些顶点数据。 – ChatCloud