我正在使用pvrsdk在ubuntu 10.10中使用Opengl-es 2.0。 在我的代码中,我采用三角形的顶点进行渲染,但是当我必须在顶点着色器中使用Attribute参数时。它是如何改变的
我在示例中看到他们正在使用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 :(得分:2)
OpenGL 3 / OpenGL-ES 2放弃了预定义顶点属性“position”,“normal”,“texcoord”,......的概念,它们通过glVertexPointer,glNormalPointer,glTexCoordPointer,...提供......
而是在着色器中引入自定义varyings
/ in
属性标识符。这些标识符由所谓的属性位置(数字索引)引用。 glBindAttribLocation
允许用户将属性标识符分配给特定位置。在上面的代码片段的情况下,似乎存在一个全局常量VERTEX_ARRAY
- 由程序代码(!)引入,即不是由OpenGL预定义或类似的东西 - 这是普遍用于myVertex
着色器中的vary / 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
,您可以使用
shader.attrib.vertex = glGetAttribLocation(shader.program_object, "myVertex");
并在调用glVertexAttribPointer
时使用该变量glVertexAttribPointer(shader.attrib.vertex, …)