Opengl 使摄影机指向目标

Opengl 使摄影机指向目标,opengl,3d,glu,Opengl,3d,Glu,我试着把相机指向一个有纹理的平面。我使用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,

我试着把相机指向一个有纹理的平面。我使用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

gluLookAt是您用来执行请求的呼叫。然而,在我们得到答案之前,还有另一个问题需要首先解决

您最初将OpenGL置于GL_投影模式,并正确地将透视矩阵(而不是堆栈)与对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,然后你把它们作为中间的三个参数传递给gluLookAt。更大的问题可能是您要将相机放置在何处。如果你想要一个类似于僚机视图的东西,你在飞机旁边模拟飞行,你可以选择一个合适的偏移量,比如说离飞机左舷20个单位,后面10个单位,在同一个飞机几何平面上飞行,而不是飞机。然后将摄影机位置设置为500-20、50+10、0+0,并将这三个值作为前三个参数传递。最后,将y轴设置为指向上,并像最初一样将其作为最后一个参数传递。gluLookAt将负责生成矩阵,并将其应用于模型视图矩阵堆栈。

您在问什么?有什么问题?