2014-05-21 84 views
0

我創建一個使用GLKit在iOS中試驗opengl的視圖。視圖具有以下負載方法:Opengl 2.0 glColor4f不工作

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2]; 

    if (!self.context) { 
     NSLog(@"Failed to create ES context"); 
    } 

    GLKView *view = (GLKView *)self.view; 
    view.context = self.context; 
    view.drawableDepthFormat = GLKViewDrawableDepthFormat24; 

    [EAGLContext setCurrentContext:self.context]; 
    self.effect = [[GLKBaseEffect alloc] init]; 

} 

而且在用於形狀我有以下代碼平局方法:然而

float vertices[] = { 
    -1, -1, 
    1, -1, 
    0, 1}; 

glEnableVertexAttribArray(GLKVertexAttribPosition); 

glColor4f(0.0, 1.0, 0.0, 1.0); 
glVertexAttribPointer(GLKVertexAttribPosition, 2, GL_FLOAT, GL_FALSE, 0, vertices); 
glDrawArrays(GL_TRIANGLES, 0, sizeof(vertices)); 

glDisableVertexAttribArray(GLKVertexAttribPosition); 

此代碼將繪製在屏幕的中心的三角形,三角形是白色的。我使用glColor4f(0.0, 1.0, 0.0, 1.0)行將當前顏色設置爲綠色,但這不會更改當前的繪製顏色。我怎樣才能改變三角形的顏色?

回答

4

OpenGL 2.0使用着色器來柵格化幾何。你需要告訴你的着色器你想看到什麼顏色。這樣做的方法通常是將頂點的顏色屬性設置爲你想要的,我沒有使用GLKit,但我看到它有一個GLKVertexAttribColor。嘗試將其設置爲您想要的顏色:

GLfloat triangle_colors[] = { 
    1.0, 1.0, 0.0, 1.0, 
    0.0, 0.0, 1.0, 1.0, 
    1.0, 0.0, 0.0, 1.0, 
}; 

glVertexAttribPointer(
    GLKVertexAttribColor, // attribute 
    4,     // number of elements per vertex, here (r,g,b,a 
    GL_FLOAT,   // the type of each element 
    GL_FALSE,   // take our values as-is 
    0,     // no extra data between each position 
    triangle_colors 
); 
1

glColor4f不是ES 2.0調用。您必須拉入ES 1.0頭文件才能編譯。

如果您只想使用純色,最簡單的方法是在着色器中定義uniform變量,並將顏色作爲制服傳入。或者你可以使顏色成爲額外的頂點屬性。

如果您使用GLKit提供的預烘烤着色器,則應該能夠使用GLKVertexAttribColor傳遞顏色,這與您用GLKVertexAttribPosition指定頂點位置的方式非常相似。