2013-11-24 83 views
0

我想在opengl中設置一個簡單的方向燈。我的場景初始化代碼:Opengl光線方向

float light_position[] = { 0, -1,0, 0.0f }; 
float light_ambient[] = {1.0f, 1.0f, 1.0f, 1.0f }; 
float light_diffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f }; 

float mat_ambient[] = { 1.0f, 0.0f, 0.0f, 1.0f }; 
float mat_diffuse[] = { 0.0f, 1.0f, 0.0f, 1.0f }; 

glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); 
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); 

glEnable(GL_LIGHTING); 
glEnable(GL_LIGHT0); 
glShadeModel(GL_SMOOTH); 

然後,我只是呈現一個三角形:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 

glLightfv(GL_LIGHT0, GL_POSITION, light_position); 
glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient); 
glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); 


glBegin(GL_TRIANGLES); 
    glNormal3f(0,1,0); 
    glVertex3f(0,-1,-2.0f); 
    glNormal3f(0,1,0); 
    glVertex3f(-1,-1,-1); 
    glNormal3f(0,1,0); 
    glVertex3f(1,-1,-1); 
glEnd(); 

我只是光像太陽,從上往下(朝Y軸負無窮大)閃耀,所以我的三角形應該是黃色的(紅色環境材料+綠色漫反射),但我的三角形是紅色的,就像沒有任何光。如果我將燈光位置更改爲{0,1,0,0},則三角形變爲黃色。爲什麼?光線方向是從設置爲(0,0,0)的位置開始的?

回答

3

解釋是相反的。 { 0, -1,0, 0.0f, 0.0f }的明亮位置定義了向下的光線,向上照亮。因此,該燈不會檢查您的三角形,而在{ 0, 1,0, 0.0f, 0.0f }處有燈亮。

+0

那麼光線總是朝着(0,0,0)閃耀,從它的位置? – gberes

+0

是的,這是正確的。除非您指定另一個方向(例如用於投射燈) –

+0

否,從其位置到處都有一盞燈。 – pete