使相机指向目标

时间:2013-12-29 17:27:13

标签: 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, 0.0, 1.0, 0.0);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

平面位于x = 500.0,y = 50.0,z = 0.0

1 个答案:

答案 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将负责生成矩阵,并将其应用于模型视图矩阵堆栈。