本周末我开始学习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)。
我确信这很简单。但我没有看到它。一点帮助?
答案 0 :(得分:2)
最终找到了一种在GLKit中启用颜色材料的方法。
这一行可以解决问题:
self.effect.colorMaterialEnabled = GL_TRUE;