我想了解glLookAt
函数。
需要3个三胞胎。第一个是眼睛位置,第二个是眼睛盯着的点。那一点将出现在我的视口中心,对吗?第三个是'向上'向量。我理解'向上'矢量的含义,如果它垂直于从眼睛到凝视点的矢量。问题是,是否允许指定其他向量,如果是,那么它的含义是什么?
对gluPerstpective
,glLookAt
和glFrustum
的图形详细说明的链接也非常感谢。官方OpenGL文档似乎不适合新手。
请注意,当垂直于眼睛 - >对象矢量时,我理解向上矢量的含义。问题是什么是意义(如果有的话),如果不是的话。我无法通过玩参数来解决这个问题。
答案 0 :(得分:11)
只要它与向上矢量“足够垂直”,它就可以工作。重要的是向上矢量和观察矢量之间的平面。
如果这两个对齐,则向上方向或多或少是随机的(基于值中的非常小的位),因为对它的小调整将使其指向观察的上方/左侧/右侧向量。
如果它们具有足够大的分离角度(在32位浮点数学中),它将很好地工作。这个角度通常不需要超过一度左右,所以它们可以非常接近。但如果差异降到几位,每个改变位将产生巨大的方向性变化。
归结为数值精度。
(我确信有更多的数学术语和定义,但是从大学开始已经有几年了......)
最后一句话:如果向量是平行的,那么向上方向是完全未定义的,你会得到一个退化的视图矩阵。
答案 1 :(得分:3)
向上矢量让openGL知道你的相机是什么样的。
在真实世界中思考,如果你必须在空间中指向,你可以从一个到另一个画一条线。然后,您可以对齐一个对象,例如相机,使其从一个对象指向另一个对象。但你无法知道你的对象应如何围绕该线所围绕的轴旋转。向上矢量决定了摄像机应该站立的方向。
大部分时间,你的向上矢量将是(0,1,0),这意味着相机将像你通常拿着相机一样旋转,或者你的头抬起来。如果你设置你的向上矢量(1,0,0),就像把头放在一边,所以从你的头部到头顶指向右边。你仍然从同一点(或多或少)看到同一点,但你的“向上”已经改变了。 (0,-1,0)的外观向量会使相机朝上,就像你在哪里做手持架一样。
你可以想到这一点的方法,你的手臂是从相机位置(你的肩膀)到相机看到点(你的食指)的矢量,如果你把拇指伸出来,这是你向上的向量。
此图片可能对您有所帮助http://images.gamedev.net/features/programming/oglch3excerpt/03fig11.jpg
<强> EIDT 强>
垂直与否。
我现在看到你在问什么。例如,你在(10,10,10)看(0,0,0)你的观察方向的结果向量是(-10,-10,-10)垂直于此的向量无关紧要的目的你向上glLookAt,如果你想让视图定向,这样你就像一个普通人只是往下看,只需将向上设置为(0,1,0)实际上,除非你想要能够滚动相机,你不需要这个别的东西。
答案 2 :(得分:2)
在这个网站上你有一个很棒的教程
http://www.xmission.com/~nate/tutors.html
http://users.polytech.unice.fr/~buffa/cours/synthese_image/DOCS/www.xmission.com/Nate/tutors.html
下载可执行文件,您可以将参数值更改为glLookAt函数,并查看“实时”发生的情况。
答案 3 :(得分:1)
向上矢量不需要垂直于观察方向。只要它与观察方向不平行(或非常接近平行),你应该没问题。
假设您有一个视平面法线,N(视线方向)和一个向上矢量(不能与N平行),UV你计算实际向上矢量,它将首先用于相机变换计算向量V = UV - (N * UV)N。 V又用于计算通过创建一个垂直于N和V的向量而使用的实际向上向量,其中U = N x V.
答案 4 :(得分:0)
是。它是任意的,它可以使相机“滚动”,即看起来好像场景围绕眼轴旋转。
答案 5 :(得分:-3)