我有非常简单的 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];
}
感谢您的任何建议...