2011-04-06 75 views
1

基本上,我想讓openGL繪製一堆四邊形。每個四邊形都有不同的顏色。現在我的問題是,當我調用glColor4f()時,顏色不適用於材質。我發現那是因爲我在渲染過程的其他地方使用了紋理,所以我禁用了它。仍然,不是結果。經過一些Google搜索後,我碰到了glColorMaterial(),它確實正確顯示了四邊形,但是因爲我使用glColour4f()爲每個四邊形着色,所以舞臺上的每個3D紋理對象都已着色。所以現在我有點卡住了;我想在我的3D物體上啓用照明,但是這些少數四邊形應該以平坦的顏色繪製,而不需要任何照明。這樣做的openGL方法是什麼? 我的OpenGL上下文設置:如何獲取openGL渲染彩色四邊形?

glViewport(0, 0, dim.width, dim.height); 
glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
gluPerspective(60.0f, (float)(dim.width/dim.height), 0.1f, 10000.0f); 
glMatrixMode(GL_MODELVIEW); 
glClearColor(94.0f/255.0f, 161.0f/255.0f, 255.0f/255.0f, 0.5f); 
glClearDepth(1.0); 
glShadeModel(GL_SMOOTH); 
glEnable(GL_DEPTH_TEST); 
glDepthFunc(GL_LEQUAL); 
glEnable(GL_CULL_FACE); 
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); 
glEnable(GL_BLEND); 
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 
glEnable(GL_LIGHTING); 
glEnable(GL_LIGHT1); 
glEnable(GL_TEXTURE_2D); 
+1

我不知道這個確切的答案...但OpenGL是非常狀態爲基礎的,只要你呈現一個頂點的狀態始終考慮。所以......我不記得如何實際* *做了,但你基本上要禁用任何你能得到的紋理,要考慮材料和燈光,然後渲染你的股四頭肌,然後再重新啓用一切。 (**編輯:**使用'glDisable(GL_LIGHTING)'那應該有希望做到這一點。) – 2011-04-06 19:27:34

+0

@fazo:該OP對應該與燈光渲染其他四邊形一些紋理。 – 2011-04-06 19:28:08

+0

使用GL_EMISSION的glColorMaterial應該可以工作。 – josefx 2011-04-06 20:44:50

回答

3

鉑Azure的說,你需要正確的繪製你的四邊形前禁用燈光和紋理,然後重新打開它之後。就像這樣:

glDisable(GL_LIGHTING); 
glDisable(GL_TEXTURE_2D); 

// Draw quads 

glEnable(GL_LIGHTING); 
glEnable(GL_TEXTURE_2D); 

你應該罰款只使用glColorf像往常一樣(你不需要glColorMaterial)。

+0

它只能重新設置照明,但我想我可以找出一個。感謝大家的幫助 :) – Bartvbl 2011-04-06 20:57:51