【问题标题】:How do I enable colored vertices in OpenGL ES (using GLKit)?如何在 OpenGL ES(使用 GLKit)中启用彩色顶点?
【发布时间】:2012-10-02 05:58:25
【问题描述】:

我这个周末开始学习 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 中无效(根据 Khronos 的 sdk page )。

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

【问题讨论】:

    标签: ios opengl-es glkit


    【解决方案1】:

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

    这一行可以解决问题:

    self.effect.colorMaterialEnabled = GL_TRUE;
    

    【讨论】:

    • 您确定这是问题所在吗?我在我正在绘制两个三角形的示例中添加了您的代码来设置颜色。它第一次工作,没有在任何地方设置 colorMaterialEnabled。我也是 OpenGL-ES 的新手。
    猜你喜欢
    • 1970-01-01
    • 2016-05-04
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    • 2012-05-27
    • 2014-02-20
    相关资源
    最近更新 更多