2011-06-29 84 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, …)