我想提出一个光在被固定在某个点现场固定的光源。下面介绍一下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