【问题标题】:C++ OpenGL gluLookAt helpC++ OpenGL glu查看帮助
【发布时间】:2011-05-07 03:30:44
【问题描述】:

我一直在尝试使用 gluLookAt,但我遇到了一些问题...我的第一个问题是相机的默认位置是什么,每当我尝试使用它时,我的整个场景似乎都在横向和向上旋转.. .. 我的第二个问题是....从我读到的内容是 gluLookAt(Posx,Posy,PosZ,yaw,pitch,roll,then 三个向上向量)

但是偏航俯仰和滚动假设的顺序是什么?

已解决
相机的默认位置在 gluLookAt(0, 0, 0, 0, 0,-1, 0, 1, 0); 感谢德鲁的所有帮助:D

【问题讨论】:

    标签: c++ opengl


    【解决方案1】:

    您似乎得到了一些关于 gluLookAt() 参数的错误信息。从 OpenGL 2.1 online documentation 开始,参数应该如下:

    eyeX, eyeY, eyeZ:
      World coordinates of camera location
    
    centerX, centerY, centerZ:
      World coordinates of camera aimpoint (what it's looking at).
      This point will be in the center of the resulting image, assuming
      that it lies between the near & far clip planes.
    
    upX, upY, upZ:
      A vector (preferrably orthogonal to the line of sight) that specifies the
      roll orientation of the camera (that is, which way is "up" in the image).
    

    如您所见,没有明确提及俯仰、滚动或偏航。

    另外,如果我没记错的话,默认情况下,相机位于 (0, 0, -1) ——但这并不重要,因为您几乎总是会在模型视图矩阵设置为标识的情况下调用 gluLookAt。

    【讨论】:

    • ahhh -1...但是中心是什么意思?抱歉,我对 openGL 真的很陌生
    • @|Phantasm|:我试图说清楚。这是相机正在寻找的点。 center - eye 因此是视线向量。
    • OpenGL 中没有摄像头。时期。由于 OpenGL 中没有摄像头,因此没有默认的摄像头位置 (0,0,-1)。实际发生的是,您有一个矩阵,可以转换世界空间中的坐标,称为模型视图。相机的任何运动也可以看作是整个世界的相反运动。 gluLookAt 在当前模型视图上应用了这种相反的转换。所以通常首先将模型视图重置为身份,这会将任何类型的相机放置在 origin (0,0,0)。
    • @datenwolf:我知道没有“相机”,而且我了解模型视图矩阵的工作原理。尽管如此,我们仍然(包括您在内)通俗地将 gluLookAt 的动作称为“移动相机”。默认相机位置当然真的意味着“MV矩阵的默认值”,如果我的记忆有点生疏,对不起。正如我所说,您通常会在将身份加载到 MV 后调用 gluLookAt(),这将消除任何类型的默认值的影响。
    猜你喜欢
    • 2011-03-26
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    相关资源
    最近更新 更多