2012-11-25 127 views
2

好吧,我想模仿手電筒的行爲。就目前而言,我只是想讓聚光燈出現在球體上。現在下面的代碼工作,但它只適用於GL_SPOT_CUTOFF設置爲180時,它創建一個統一的光分佈 - 不是我要去的。如果我嘗試將其設置爲任何其他值,則它會停止工作。這裏是我已經啓用照明和已完成所有初始化的東西代碼openGL聚光燈問題

GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 }; 
GLfloat light_pos [4] = {5, 2, -10, 1.0}; 

glLightfv (GL_LIGHT0, GL_SPECULAR, mat_specular); 
glLightfv (GL_LIGHT0, GL_POSITION, light_pos); 

glLightf (GL_LIGHT0, GL_SPOT_CUTOFF, 20.0f); 
glLightf (GL_LIGHT0, GL_SPOT_EXPONENT, 100.0); 

GLfloat spotDir [] = {0.0, 0.0, 0.0}; 
glLightfv (GL_LIGHT0, GL_SPOT_DIRECTION, spotDir); 

glutSolidSphere (2, 20, 20); 

glFlush(); 
glutSwapBuffers(); 

。所有表面法線都是從glutSolidSphere計算出來的,所以不知道還有什麼可能會失敗......有什麼想法?

回答

2

問題是您的spotDir。它是一個矢量,不是你的世界座標中的一個點。 嘗試將其更改爲:

GLfloat spotDir[] = { -5, -2, 10 }; 

我懶,所以我不會正常化這一載體; d

這會在你的焦點指向球心。

希望它能幫助!