我正在尝试将相机指向具有纹理的平面。我正在使用gluPerspective和glLookAt,这只在变量设置为1时才会发生。当变量设置为1时,我改变了我的视图:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(90.0, GLdouble(600)/GLdouble(600), 1.0, 200.0);
gluLookAt(100.0, 50.0 + 0, 0+0, 150, 50, 0, 0.0, 1.0, 0.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
平面位于x = 500.0,y = 50.0,z = 0.0
答案 0 :(得分:0)
gluLookAt
是你用来做你所要求的电话。然而,在我们得到答案之前,首先要解决另一个问题。
您最初将OpenGL置于GL_PROJECTION
模式,并正确地将透视矩阵(而不是堆栈)与您对gluPerspective
的调用相乘。接下来,将gluLookAt
生成的矩阵也应用于投影矩阵堆栈。一般来说,你不想这样做。由于gluLookAt
生成一个查看矩阵,它实际上应该放在模型 - 视图矩阵堆栈上。这是一个更正确的代码序列:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(90.0, GLdouble(600)/GLdouble(600), 1.0, 200.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(100.0, 50.0 + 0, 0+0, 150, 50, 0, 0.0, 1.0, 0.0);
现在,问你的问题:
我正在尝试将相机对准我带纹理的平面。
gluLookAt
取三个“套”参数:
所以,你需要选择平面上你希望相机指向的点,你说它是(500,50,0),所以你将它们作为中间三个参数传递给{{1 }}。更大的问题可能是您想要定位相机的位置。如果你想要一个类似“僚机视图”的东西,你正在模拟飞机旁边的飞行,你会选择一个合适的偏移量,比如飞机左舷的20个单位,后面有10个单位,飞入同一平面(几何平面,而不是飞机)。然后,您将摄像机位置设置为(500 - 20,50 + 10,0 + 0),并将这三个值作为前三个参数传递。最后,将 y -axis设置为指向上方,并将其作为最后一个参数传递,就像您最初那样。 gluLookAt
将负责生成矩阵,并将其应用于模型视图矩阵堆栈。