2013-04-05 25 views
1

我需要爲使用TRIANGLE_FAN填充的OpenGL不規則多邊形添加正確的光照。如何添加頂點到OpenGL C++ triangle_fan

glBegin(GL_TRIANGLE_FAN); 

glNormal3f(0.0, 0.0, 1.0); 
glVertex3f(0.0f, 0.0f,0.0f); 
glVertex3f(b[0][0],b[0][1], 0); 
glVertex3f(b[11][0], b[11][1], 0); 
glVertex3f(b[7][0], b[7][1], 0); 
glVertex3f(b[10][0], b[10][1], 0); 
glVertex3f(b[6][0],b[6][1], 0); 
glVertex3f(b[5][0],b[5][1], 0); 
glVertex3f(b[4][0],b[4][1], 0); 
glVertex3f(b[8][0],b[8][1], 0); 
glVertex3f(b[3][0],b[3][1], 0); 
glVertex3f(b[9][0],b[9][1], 0); 
glVertex3f(b[2][0],b[2][1], 0); 
glVertex3f(b[1][0],b[1][1], 0); 
glVertex3f(b[0][0],b[0][1], 0); 

glEnd(); 

我目前的多邊形的問題是它不能正確反射光線。它只從它的頂點開始這樣做,從而使光線呈現X形狀。我猜測我需要添加頂點到我的多邊形。有沒有簡單的方法來保持我的三角迷,但添加頂點?

+0

任何機會我可以說服你使用頂點緩衝區對象和着色器?它會讓你的生活變得如此簡單... – 2013-04-05 16:24:07

+0

Idealy我會堅持我所擁有的,因爲我有很短的期限,那麼整個計劃都是基於這種結構。 – juliensaad 2013-04-05 16:26:12

+2

我不是一個偉大的固定pipleline傢伙 - 我所有的專業工作都使用OGL_ES2及以上版本。我會在這方面服從其他。老實說,我不確定如何在固定管道中使用碎片照明。祝你好運! – 2013-04-05 16:28:35

回答

1

爲了在照明對象時獲得「正確」結果,您需要定義適當的法線。由於每個頂點只有一個法線,所以顯然沒有正確遮蔽。

但是,沒有正確的方式來計算任何模型的法線;你必須定義如何該對象應該被着色,然後添加更多的glNormal調用來通知OpenGL你是否希望它被遮蔽。