1

我这个周末开始学习 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 问题,但提供的解决方案是使用 GL_COLOR_MATERIAL 调用 glEnable ,据我所知,这个常量在 OpenGL ES 中无效(根据 Khronos 的sdk 页面)。

我敢肯定这很简单。但我没有看到它。一点帮助?

4

1 回答 1

2

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

这条线可以解决问题:

self.effect.colorMaterialEnabled = GL_TRUE;
于 2012-10-02T11:23:31.177 回答