2012-06-17 98 views
0

我有類似呵呵的例子非常簡單的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]; 
} 

感謝您的任何意見...

+0

我看不到glColor3f或glColor4f還是真的任何其他着色器程序,等一個電話... – trumpetlicks

+0

據我所知,你建議使用OpenGL ES1功能,而我正在使用ES2 API – Anonymous

回答

0

好,我發現問題在哪裏:)

至於我在Open GL的初學者,我只是從示例中拷貝了代碼並重命名了一些變量......並沒有發現我將ColorBuffer(VBO顏色,即繪製對象的實際顏色數據)變量重命名爲ColorRenderBuffer變量(發生在內存中處理GL實際顏色數據)

愚蠢的錯誤,我希望沒有人會做同樣的:)