我有類似呵呵的例子非常簡單的OpenGL ES的例子:http://nehe.gamedev.net/tutorial/ios_lesson_02__first_triangle/50001/顏色不正確實施的OpenGL ES2 - IOS
如上圖所示的三角形充滿了三種顏色 - 紅,藍,綠。 相反,在我的應用程序中,我總是得到幾乎完全充滿黑色的三角形,只有頂部頂點周圍的小區域充滿了綠色和右下方充滿紅色的小區域......並且根本沒有藍色。
第一個問題是:爲什麼顏色不在我的三角形中間插入,爲什麼藍色根本不可見?
在我的顏色陣列的任何更改會影響什麼,例如當我嘗試使三角形白色的顏色不會改變...在此期間,如果我改變位置數組中的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還是真的任何其他着色器程序,等一個電話... – trumpetlicks
據我所知,你建議使用OpenGL ES1功能,而我正在使用ES2 API – Anonymous