【问题标题】:Incorrect colors implementation OpenGL ES2 - IOS不正确的颜色实现OpenGL ES2 - IOS
【发布时间】:2012-06-17 23:46:45
【问题描述】:

我有一个非常简单的 OpenGL ES 示例,类似于 Hehe 的示例:http://nehe.gamedev.net/tutorial/ios_lesson_02__first_triangle/50001/

如上图所示的三角形填充了三种颜色——红、蓝、绿。 相反,在我的应用程序中,我总是得到几乎完全填充黑色的三角形,只有顶部顶点周围的小区域填充绿色,右底部周围的小区域填充红色......根本没有蓝色。

第一个问题是:为什么颜色没有插入到我的三角形中间,为什么蓝色根本看不到?

我的颜色数组中的任何更改都不会影响,例如当我尝试将三角形设为白色时,颜色无论如何都不会改变......同时,如果我改变位置数组中的 Z 坐标,那么我可以看到蓝色。

第二个问题是:为什么颜色的任何变化都不起作用,而位置的变化反而会改变颜色?

似乎在这里我犯了一个愚蠢的错误,但我无法抓住它。

这是顶点/颜色数组:

const float colors[] = { // this does not work, triangle still black-green-red
    1.0, 1.0, 1.0, 1.0,
    1.0, 1.0, 1.0, 1.0,
    1.0, 1.0, 1.0, 1.0
};

const float positions[] = { // if i change 3rd index to 1.0 then i will see blue color
    -0.5, -0.5, 0.0, 1.0,
     0.0,  0.5, 0.0, 1.0,
     0.5, -0.5, 0.0, 1.0
};

这是VBO:

- (BOOL)setupVBO 
{
    BOOL success = YES;

    glGenBuffers(1, &_positionBuffer);
    glBindBuffer(GL_ARRAY_BUFFER, _positionBuffer);
    glBufferData(
        GL_ARRAY_BUFFER, 
        sizeof(positions) * sizeof(float), 
        &positions[0], 
        GL_STATIC_DRAW);

    glGenBuffers(1, &_colorBuffer);
    glBindBuffer(GL_ARRAY_BUFFER, _colorBuffer);
    glBufferData(
        GL_ARRAY_BUFFER, 
        sizeof(colors) * sizeof(float), 
        &colors[0], 
        GL_STATIC_DRAW);

    return success;
}

渲染:

- (void)render:(CADisplayLink*)displayLink
{
    glClearColor(0.5, 0.5, 0.5, 1.0);
    glClear(GL_COLOR_BUFFER_BIT);

    glBindBuffer(GL_ARRAY_BUFFER, _positionBuffer);
    glVertexAttribPointer(_positionSlot, 4, GL_FLOAT, GL_FALSE, 0, NULL);

    glBindBuffer(GL_ARRAY_BUFFER, _colorRenderBuffer);
    glVertexAttribPointer(_colorSlot, 4, GL_FLOAT, GL_FALSE, 0, NULL);

    glDrawArrays(GL_TRIANGLES, 0, 3);

    [_glContext presentRenderbuffer:GL_RENDERBUFFER];
}

感谢您的建议...

【问题讨论】:

  • 我没有看到对 glColor3f 或 glColor4f 或任何其他着色器例程等的调用...
  • 据我了解,您建议使用 OpenGL ES1 函数,而我使用的是 ES2 API

标签: ios5 opengl-es-2.0


【解决方案1】:

好的,我发现问题出在哪里:)

就我在 Open GL 中的初学者而言,我只是从示例中复制粘贴代码并重命名了一些变量...并没有发现我将 ColorBuffer(VBO 颜色,即绘图对象的实际颜色数据)变量重命名为 ColorRenderBuffer 变量(放置在内存中 GL 处理实际颜色数据的地方)

愚蠢的错误,我希望没有人会这样做:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-04
    相关资源
    最近更新 更多