我跟随tutorial学习OpenGL,他们使用glm::lookAt()
函数来构建视图,但我不理解glm::lookAt()
的工作原理,显然,GLM没有详细的文档。有人能帮助我理解glm::lookAt()
的参数和工作原理吗?
GLM文档说:
detail::tmat4x4<T> glm::gtc::matrix_transform::lookAt
(
detail::tvec3< T > const & eye,
detail::tvec3< T > const & center,
detail::tvec3< T > const & up
)
字符串
我目前的理解是,相机位于eye
,并面向center
。(我不知道up
是什么)
4条答案
按热度按时间qvtsj1bj1#
up
矢量基本上是一个定义你的世界“向上”方向的矢量。在几乎所有正常情况下,这将是矢量(0, 1, 0)
,即朝向正Y。eye
是相机的视点位置,center
是你正在看的地方。如果你想使用方向向量D
而不是中心位置,你可以简单地使用eye + D
作为中心位置,其中D
可以是一个单位向量。至于内部工作,或者更多细节,这是构建视图矩阵的常见基本函数。尝试阅读gluLookAt()的文档,它在功能上是等效的。
3lxsmp7m2#
在这里,
Up
矢量定义了3D世界中的“向上”方向(对于此相机)。例如,vec3(0, 0, 1)
的值表示Z轴指向上。Eye
是虚拟3D相机所在的点。Center
是相机所看的点(场景的中心)。理解事物的最好方法是自己制作。下面是如何使用3个向量构建相机变换:
Eye
,Center
和Up
。字符串
创建新坐标系:
型
重新计算
Y = Z cross X
:型
叉积的长度等于平方根的面积,对于非垂直单位长度向量,其小于1.0;因此在这里归一化
X
,Y
:型
将所有内容放入生成的4x 4矩阵中:
型
c2e8gylq3#
在设置
camera
(或eye
)和target
(center
)之后,使camera
面对target
,我们仍然可以旋转camera
以获得不同的图片,所以这里是up
矢量,它使camera
固定,不能旋转。的数据
nkoocmlb4#
字符串
也许你需要检查三个坐标:对象(或模型)坐标,世界坐标和相机(或视图)坐标。