2011-09-30 62 views
1

我正在創建一個用於iOS的對象加載器,我設法從OBJ文件加載頂點,法線和麪數據,然後將這些數據放入數組中以重建目的。但是,我所遇到的與照明的問題,在底部是從我的節目的模擬視頻 - 這是在以下位置的照明:不尋常的燈光效果 - 隨機多邊形顏色

CGFloat position[] = { 0.0f, -1.0f, 0.0f, 0.0f }; 
glLightfv(GL_LIGHT0, GL_POSITION, position); 

這兩種渲染每種方法規定框架和設置時調用一次的設置視圖方法。

其他各種照明細節都在這裏,這些在安裝過程中被調用一次:

glEnable(GL_LIGHTING); 
glEnable(GL_LIGHT0); 
CGFloat ambientLight[] = { 0.2f, 0.2f, 0.2f, 1.0f }; 
CGFloat diffuseLight[] = { 1.0f, 0.0f, 0.0, 1.0f }; 
glLightfv(GL_LIGHT0, GL_AMBIENT, ambientLight); 
glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuseLight); 
CGFloat position[] = { 0.0f, -1.0f, 0.0f, 0.0f }; 
glLightfv(GL_LIGHT0, GL_POSITION, position); 
glEnable(GL_COLOR_MATERIAL); 
glEnable(GL_NORMALIZE); 

問題的視頻可以在這裏找到:

http://youtu.be/dXm4wqzvO5c

感謝,

Paul

[編輯]

進一步信息法線也被下面的代碼提供的,他們目前都在一個大的法線數組或XYZ XYZ XYZ等等

// FACE SHADING 
glColorPointer(4, GL_FLOAT, 0, colors); 
glEnableClientState(GL_COLOR_ARRAY); 
glNormalPointer(GL_FLOAT, 3, normals); 
glEnableClientState(GL_NORMAL_ARRAY); 
glDrawArrays(GL_TRIANGLES, 0, 3*numOfFaces); 
glDisableClientState(GL_COLOR_ARRAY); 

回答

1

我現在覺得難以置信傻了的一部分我想是一名學生程序員。我會留下一個答案,如果其他人得到這個問題,他們也可以解決它!這個錯誤是簡單地降低到一個錯字:

glNormalPointer(GL_FLOAT, 3, normals); 

本來應該讀

glNormalPointer(GL_FLOAT, 0, normals); 

的第二個參數是其僅使用STRIDE如果數組包含其它值例如垂直座標/法線/紋理座標。由於我的單陣列值之間的跨度應爲0.