Ios5 不正确的颜色实现OpenGL ES2-IOS
我有一个非常简单的OpenGL ES示例,类似于Hehe的示例: 如上图所示,三角形中填充了三种颜色——红、蓝、绿。 相反,在我的应用程序中,我总是让三角形几乎完全用黑色填充,只有顶部顶点周围的小区域用绿色填充,右底部周围的小区域用红色填充。。。而且根本没有蓝色 第一个问题是:<强>为什么颜色不能在我的三角形中间插入,为什么蓝色根本就看不见?< /强> 我的颜色数组中的任何更改都不会产生任何影响,例如,当我尝试将三角形变为白色时,颜色始终不会更改。。。同时,如果我改变位置数组中的Z坐标,那么我可以看到蓝色 第二个问题是:为什么颜色的任何变化都不会起作用,而位置的变化会改变颜色? 好像在这里的某个地方,我犯了一个愚蠢的错误,但我抓不住 这是顶点/颜色数组:Ios5 不正确的颜色实现OpenGL ES2-IOS,ios5,opengl-es-2.0,Ios5,Opengl Es 2.0,我有一个非常简单的OpenGL ES示例,类似于Hehe的示例: 如上图所示,三角形中填充了三种颜色——红、蓝、绿。 相反,在我的应用程序中,我总是让三角形几乎完全用黑色填充,只有顶部顶点周围的小区域用绿色填充,右底部周围的小区域用红色填充。。。而且根本没有蓝色 第一个问题是:为什么颜色不能在我的三角形中间插入,为什么蓝色根本就看不见?< /强> 我的颜色数组中的任何更改都不会产生任何影响,例如,当我尝试将三角形变为白色时,颜色始终不会更改。。。同时,如果我改变位置数组中的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];
}
谢谢你的建议……好的,我发现问题出在哪里:) 就我在OpenGL方面的初学者而言,我只是复制粘贴了示例中的代码,并重命名了一些变量。。。并没有注意到我将ColorBuffer(VBO颜色,即图形对象的实际颜色数据)变量重命名为ColorRenderBuffer变量(GL处理实际颜色数据的内存中的位置)
愚蠢的错误,我希望没有人会这样做:)我没有看到调用glColor3f或glColor4f或任何其他着色器例程等…据我所知,您建议使用OpenGL ES1函数,而我使用的是ES2 API