2010-11-03 73 views
3

我一直在爲一個月的遊戲引擎工作,並且已經完成了基本的OpenGL工作。但是,我不能像我期望的那樣照亮工作。 (注意:這是我第一次認真使用OpenGL)開放GL照明問題

我想要的是接近逼真的照明模擬 - 其中面向燈光的表面比其他燈光更亮等等。基本燈光應該有一個位置和一個顏色。這是我認爲它可以實現:

float lightv[4]; // populated with (0.6, 0.6, 0.6, 1) 
float positionv[4]; // populated with (0, 10, 0, 1) 
int lightID = GL_LIGHT0; 
int attenuationType = GL_LINEAR_ATTENUATION; 
float attenuationValue = 1; 
glLightf(lightID, attenuationType, attenuationValue); 
glLightfv(lightID, GL_DIFFUSE, lightv); 
glLightfv(lightID, GL_POSITION, positionv); 
glEnable(lightID); 

而不是做什麼,我希望它做的,它給了我照亮,彷彿有一個光相機在哪裏!每個表面都有相同的照明!

我在做什麼錯?

謝謝,我很感激。

回答

2

首先要做的是確保您在某個時刻調用了glEnable(GL_LIGHTING);。過去,首先要檢查的是你的法線是正確的。爲了照明正常工作,您需要爲每個頂點繪製一個正常的集合。如果你已經設置了法線,你應該確保它們都是單位長度。如果他們沒有一個長度,照明可能會有奇怪的表現。如果這一切都應該如此,那麼您應該記住,當您設置燈光的位置時,它會被當前的模型視圖矩陣修改,就好像它是頂點一樣。如果這些事情都不相關,我會看看我能否進一步思考。

0

設置你的光照位置你設置了你的GL_MODELVIEW變換,因爲它受當前變換矩陣的影響。否則,你會得到你發現的「前大燈」效果。