我想提出一個光在被固定在某個點現場固定的光源。下面介紹一下OpenGL site不得不說的是:創建,保留它的世界座標
我怎樣才能讓我的光相對固定的留到我的場景?我怎樣才能在角落裏放一盞燈,讓它留在那裏,而我改變了我的看法?
隨着你的看法的改變,你的模型視圖矩陣也改變。這意味着您需要重新指定燈光位置,通常在每個幀的開始處。一個典型的應用程序將顯示用下面的僞代碼的幀:
- 設置視圖變換。
- *設置光源的位置// glLightfv(GL_LIGHT_POSITION,...)*
- 發下來的場景或模型的幾何形狀。
- 交換緩衝區。
如果你的光源是燈具的一部分,你可能還需要指定一個造型變換,使光源的位置是在相同的位置周圍的固定幾何形狀。
所以我加了這個到paintGL()
函數。
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
gluLookAt(0.0, 5.0, 0.0,
0.0, 0.0, 0.0,
0.0, 1.0, 0.0);
GLfloat l0pos[] = {0.0, 0.0, 0.0, 1.0};
glLightfv(GL_LIGHT0, GL_POSITION, l0pos);
glPopMatrix();
看來還好,當我站在原地,但是當我移動相機的眼睛位置或攝像機的中心位置,光閃爍。我究竟做錯了什麼?
UPDATE2:我結束了使用此代碼,但我仍然有問題。光線不再移動,但其位置不準確。在堆棧頂部的矩陣是通過一個gluLookAt
命令,它表示攝像機位置所產生的矩陣。
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glTranslatef(xCoordinate, yCoordinate, zCoordinate);
GLfloat lpos[] = {0.0, 0.0, 0.0, w};
glLightfv(GL_LIGHT0, GL_POSITION, lpos);
glPopMatrix();
什麼是在lpos [] = {0,0,0,w}中設置的變量'w';?它應該是一個,否則你會得到一些縮放效果。 – Zilchonum 2011-06-14 22:52:51