2015-04-29 90 views
0

我的OpenGL遊戲項目出現問題。 光性能我已經定義數組:Opengl,燈光靜止旋轉場景

GLfloat mat_ambient[] = { 1.0, 1.0, 1.0, 1.0 }; 
GLfloat mat_shininess[] = { 50.0 }; 
GLfloat light_position[] = { 3.0, 20.0, 3.0, 0.0 }; 

我使用它:

glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient); 
glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess); 
glLightfv(GL_LIGHT0, GL_POSITION, light_position); 

glEnable(GL_LIGHTING); 
glEnable(GL_LIGHT0); 

glEnable(GL_COLOR_MATERIAL); 
glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE); 

我定義我的相機類和更新方法:

void update() 
{ 
    glLoadIdentity(); 
    x = dist * sin(alpha) + 3; 
    z = dist * cos(alpha) + 3; 
    gluLookAt(x, y, z, 3, 5, 3, 0, 1, 0); 
    if (y <= 1) y = 1; 

    cout << "x " << x << "y: " << y << "z: " << z << "dist: " << dist << endl; 
    glutPostRedisplay(); 
} 

我的場景的中心點是(3,5,3)。我想圍繞這一點旋轉場景以及它的工作。但我對燈光有問題 - 它也是「旋轉」 - 我不知道如何描述這一點。

我想簡單的照明和相機圍繞點旋轉。

回答

1

固定功能GL存儲眼睛空間中的光線位置。爲此,在glLightfv(..., GL__POSITION, ...)調用時,燈光位置乘以當前ModelView矩陣。如果移動相機而不重新指定光線位置,則會產生相對於相機保持靜止的光線的效果。

如果你想要一個在世界上靜止的光源,你必須加載視圖矩陣(以及視圖矩陣),並在視圖矩陣發生變化時指定世界空間光源位置。