2015-06-13 37 views
1

就像下面鏈接中顯示的圖片一樣。我想用白色給我的機器人手上色(RGB:0.9 0.9 0.9)。當我使用glColor3f時,白色顯示正確。但是當我將RGB數據存儲在GLfloat數組中並調用glColorPointer時,顏色變得很奇怪。OpenGL:使用glColorPointer讓顏色變得不可思議

這裏是右臂

static const GLfloat playerBodyColor[] = {0.9, 0.9, 0.9}; 

glEnableClientState(GL_COLOR_ARRAY); 
//glColor3f(0.9, 0.9, 0.9); 
glColorPointer(3, GL_FLOAT, 0, playerBodyColor); 
glTranslatef(0.0, player_body_height/6, player_body_width/2+LENGTH_UNIT/2); 
glRotatef(340.0, 0.0, 0.0, 1.0); 
glPushMatrix(); 
glTranslatef(2*LENGTH_UNIT, 0.0, 0.0); 
glScalef (4.0, 1.0, 1.0); 
copyCodeSolidCube (LENGTH_UNIT); 
glDisableClientState(GL_COLOR_ARRAY); 
glPopMatrix(); 

的代碼,如果我改變這樣的代碼:

static const GLfloat playerBodyColor[] = {0.9, 0.9, 0.9}; 


//glEnableClientState(GL_COLOR_ARRAY); 
glColor3f(0.9, 0.9, 0.9); 
//glColorPointer(3, GL_FLOAT, 0, playerBodyColor); 
glTranslatef(0.0, player_body_height/6, player_body_width/2+LENGTH_UNIT/2); 
glRotatef(340.0, 0.0, 0.0, 1.0); 
glPushMatrix(); 
glTranslatef(2*LENGTH_UNIT, 0.0, 0.0); 
glScalef (4.0, 1.0, 1.0); 
copyCodeSolidCube (LENGTH_UNIT); 
//glDisableClientState(GL_COLOR_ARRAY); 
glPopMatrix(); 

顏色顯示正確。

的正確的色碼圖片: http://imgur.com/S6zt5wf

的錯色碼圖片: http://imgur.com/8m5Ag1O

在代碼中,我也稱爲功能copyCodeSolidCube。 這裏是copyCodeSolidCube部分代碼:

glEnableClientState (GL_VERTEX_ARRAY); 
glEnableClientState (GL_NORMAL_ARRAY); 
glVertexPointer (3, GL_FLOAT, 0, vert); 
glNormalPointer (GL_FLOAT, 0, norm); 

glDrawElements(GL_TRIANGLE_FAN, 4, GL_UNSIGNED_BYTE, one); 
glDrawElements(GL_TRIANGLE_FAN, 4, GL_UNSIGNED_BYTE, two); 
glDrawElements(GL_TRIANGLE_FAN, 4, GL_UNSIGNED_BYTE, three); 
glDrawElements(GL_TRIANGLE_FAN, 4, GL_UNSIGNED_BYTE, four); 
glDrawElements(GL_TRIANGLE_FAN, 4, GL_UNSIGNED_BYTE, five); 
glDrawElements(GL_TRIANGLE_FAN, 4, GL_UNSIGNED_BYTE, six); 

glDisableClientState (GL_VERTEX_ARRAY); 
glDisableClientState (GL_NORMAL_ARRAY); 

問題出在哪裏?

+0

請告訴我們代碼 –

+0

等一下。讓我粘貼我的代碼。 thx –

回答

1

使用glColorPointer(),可以指定一個顏色數組,每個頂點一個顏色。例如,如果您的立方體有8個頂點,則需要8個顏色的數組。由於每種顏色有3個組件,因此您需要的數組的總大小爲24個浮點數。

或者,由於每個繪圖調用當前有4個頂點,因此對於4 * 3 = 12浮點值,在顏色數組中需要4種顏色。

使用此功能的一大優勢當然是您可以單獨爲每個頂點着色。如果你真的想爲每個頂點使用相同的顏色,glColor3f()實際上是正確的調用方式。或者你可以使用一個微小的變化:

glColor3fv(playerBodyColor); 

這相當於glColor3f()呼叫你有,但它是更方便,如果你已經有了3個值的數組的顏色。

+0

謝謝。你再次解決我的問題。 –