2011-03-09 49 views
2

我渲染這樣一個對象:開放GLES 1.1 - GLColorPointer創建彩虹的顏色時,我只是想紅

for (int i = 0; i < COLOR_ARRAY_SIZE; i += 4) { 
    colors[i] = 1.0f; 
    colors[i + 1] = 0.0f; 
    colors[i + 2] = 0.0f; 
    colors[i + 3] = 1.0f; 
} 

// Clear color and depth buffer 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

// Set GL11 flags: 
glEnableClientState(GL_VERTEX_ARRAY); 
glEnableClientState(GL_NORMAL_ARRAY); 
glEnableClientState(GL_COLOR_ARRAY); 

glEnable(GL_DEPTH_TEST); 

// make sure nothing messes with the colour 
glDisable(GL_BLEND); 
glDisable(GL_DITHER); 
glDisable(GL_FOG); 
glDisable(GL_LIGHTING); 
glDisable(GL_TEXTURE_2D); 
glShadeModel(GL_FLAT); 

// Load projection matrix: 
glMatrixMode(GL_PROJECTION); 
glLoadMatrixf(projectionMatrix); 

// Load model view matrix and scale appropriately 
int kObjectScale = 300f; 
glMatrixMode(GL_MODELVIEW); 
glLoadMatrixf(modelViewMatrix); 
glTranslatef(0.5f, 0.5f, 0.5f); 
glScalef(kObjectScale, kObjectScale, kObjectScale); 

// Draw object 
glVertexPointer(3, GL_FLOAT, 0, (const GLvoid*) &vertexPositions[0]); 
glNormalPointer(GL_FLOAT, 0, (const GLvoid*) &vertexNormals[0]); 
glColorPointer(4, GL_FLOAT, 0, (const GLvoid*) &colors[0]); 
glDrawElements(GL_TRIANGLES, 11733, GL_UNSIGNED_SHORT, 
     (const GLvoid*) &indices[0]); 

glDisableClientState(GL_VERTEX_ARRAY); 
glDisableClientState(GL_NORMAL_ARRAY); 
glDisableClientState(GL_COLOR_ARRAY); 

我希望這會使我的對象全部爲紅色,而是它的不同顏色的彩虹。有誰知道爲什麼?我會假設我的「顏色」數組緩衝區有問題,但我不能在我的生活中看到它是什麼。實際的頂點看起來很好。

回答

1

您的for循環非常困惑。你每次增加4你的價值。更重要的是,你在第3-5行的偏移量爲1,2和3的索引。我認爲你的COLOR_ARRAY_SIZE的定義是4?嘗試初始化您的顏色排列如下:

float colors[] = {1.0f, 0.0f, 0.0f, 1.0f};

,然後調用glColorPointer如下:我已經設定的步幅

glColorPointer(4, GL_FLOAT, 0, colors);

通知爲0。如果你的陣列只包含顏色,那麼我沒有看到你應該使用步幅的任何理由(步幅用於跳過數組中交織的信息)。

+0

我意外地將步幅設置爲1,同時嘗試並在發帖前忘記更改它,對不起 - 我會改變這一點。我以這種方式填充顏色數組,以便得到表示每個頂點的紅色的R,G,B,A值的緩衝區。我這樣做,以便我可以調試爲什麼我的顏色是一團糟。最終,我想換掉這個「紅色」緩衝區,用於我的真實顏色陣列。 COLOR_ARRAY_SIZE == 15644. –

+0

真棒 - 很高興提供幫助。 :) –

+0

應該這樣工作嗎?我將步幅改回到0,並且仍然獲得了多色效果。當然,用1.0,0.0,0.0,1.0填充我的數組會讓每個頂點都變成紅色? –