如何在OpenGL ES中启用彩色顶点(使用GLKit)?

时间:2012-10-02 05:58:26

标签: ios opengl-es glkit

本周末我开始学习OpenGL,并发现了相当多的学习曲线。我设法解决的大多数事情,但现在我被卡住了......

我创建了一个顶点数组。每个顶点(vertexT)由3个向量(位置,法线和颜色)组成。每个载体(GLKVector3)是三个浮子(即,x,y,z或r,g,b)。由于GLKVector3被定义为适用于颜色,我假设opengl很乐意使用未指定第三个浮点数的颜色值(即alpha)

我设置gl对象的功能如下所示:     glBindVertexArrayOES(_vertexArrayObject);

glGenBuffers(1, &_vertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, _vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertexT) * _vertexCount, [_vertexData mutableBytes], GL_STATIC_DRAW);

glEnableVertexAttribArray(GLKVertexAttribPosition);
glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, sizeof(vertexT), BUFFER_OFFSET(0));

glEnableVertexAttribArray(GLKVertexAttribNormal);
glVertexAttribPointer(GLKVertexAttribNormal, 3, GL_FLOAT, GL_FALSE, sizeof(vertexT), BUFFER_OFFSET(sizeof(GLKVector3)));

到目前为止一切顺利。我没有使用交错数组的颜色部分,整个对象渲染为白色,在我的绘制函数中使用以下调用:

glBindVertexArrayOES(_vertexArrayObject);
glDrawElements(GL_TRIANGLES, _triangleCount * 3, GL_UNSIGNED_SHORT, [_triangleData mutableBytes]);

所以现在我想为我的模型设置每顶点颜色,所以我添加了以下内容:

glEnableVertexAttribArray(GLKVertexAttribColor);
glVertexAttribPointer(GLKVertexAttribColor, 3, GL_FLOAT, GL_FALSE, sizeof(vertexT), BUFFER_OFFSET(sizeof(GLKVector3)*2));

但它仍然是白色的。我设法在SO上找到a question听起来像我的问题,但提供的解决方案是用GL_COLOR_MATERIAL调用glEnable,据我所知,这个常量在OpenGL ES中无效(根据{{3在Khronos)。

我确信这很简单。但我没有看到它。一点帮助?

1 个答案:

答案 0 :(得分:2)

最终找到了一种在GLKit中启用颜色材料的方法。

这一行可以解决问题:

self.effect.colorMaterialEnabled = GL_TRUE;