2012-10-02 38 views
1

这个周末我开始学习OpenGL,发现了很多学习曲线。我已经设法解决大部分事情,但现在我卡住了...如何在OpenGL ES中启用彩色顶点(使用GLKit)?

我已经创建了一个顶点数组。每个顶点(顶点T)由3个矢量(位置,法线和颜色)组成。每个矢量(GLKVector3)是浮点数的三倍(即,x,y,z或r,g,b)。由于GLKVector3被定义为适用于颜色,我假设OpenGL是快乐与不指定第三个浮动(即阿尔法)

我的功能设置我的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中无效(根据Khronos的sdk page)。

我相信这是简单的。但我没有看到它。一点帮助?

回答

2

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

这一行的伎俩:

self.effect.colorMaterialEnabled = GL_TRUE; 
+1

你确定这是问题?我添加了代码来设置我正在绘制两个三角形的示例中的颜色。它第一次没有设置colorMaterialEnabled任何地方。我也是OpenGL-ES的新手。 –

相关问题