2011-06-29 49 views
0

我正在使用pvrsdk在ubuntu 10.10上开发Opengl-es 2.0。 在我的代码中,我正在渲染三角形的顶点,但是当我必须在顶点着色器中使用Attribute参数时。它是如何改变的Vertex着色器中的属性参数

我看到在他们使用myVertex的例子。这是什么意思。

这样的:

const char* pszVertShader = "\ 
    attribute highp vec4 myVertex;\ 
    uniform mediump mat4 projmatrix;\ 
    invariant gl_Position;\ 
    void main(void)\ 
    {\ 
     gl_Position = projmatrix * myVertex;\ 
    }"; 


===============================render====================== 
glBindAttribLocation(uiProgramObject, VERTEX_ARRAY, "myVertex"); 

所以我只是想知道,我正在从顶点文本文件,它会影响到myVertex属性。

如果需要其他信息我可以提供你,我已经张贴了我的整个代码在前面的问题here

+0

什么是'VERTEX_ARRAY'? –

+0

我的整个代码都在链接中您可以看到:it指定要绑定的通用顶点属性的索引。其指数。 –

回答

2

的OpenGL 3 /的OpenGL-ES 2被放弃的预定义顶点的概念属性“位置”,“正常”, “texcoord”,......,这是通过glVertexPointer,glNormalPointer,glTexCoordPointer供应,...

而是在你的着色器,你自定义的介绍varyings/in属性标识符。这些标识符通过所谓的属性位置(数字索引)来引用。 glBindAttribLocation允许将属性标识符分配给特定位置。在上述代码片段的情况下,似乎存在全局常量VERTEX_ARRAY - 由程序代码(!)引入,即,不由OpenGL或类似的预定义 - 在着色器中普遍用于myVertex变化/ in属性。

使特定顶点属性可以用数据由glVertexAttribPointer通过一个共同的令牌VERTEX_ARRAY类似这样的语句中提供:

glVertexAttribPointer(VERTEX_ARRAY, 3, GL_FLOAT, false, 0, isVBO ? (char*)vertex.offset : (char*)vertex.data + vertex.offset); 

当然的glVertexAttribPointer的精确语义要求依赖于特定的程序,做他们。

取而代之的是(全球)不变VERTEX_ARRAY你可以使用

shader.attrib.vertex = glGetAttribLocation(shader.program_object, "myVertex"); 

以及使用一个变量shader.attrib.vertex,你每个着色器设置和使用该变量在调用glVertexAttribPointer

glVertexAttribPointer(shader.attrib.vertex, …)