0

我对相机到世界与世界到相机的转换有点困惑。

  1. 在openGL渲染管线中,转换是从世界到相机,对吧?基本上,在相机处构建视图坐标系,然后世界中的对象首先相对于相机平移,然后随着相机坐标系旋转。这就是 gluLookat 的表现吗?

  2. 如果我想从相机视图回到世界视图,应该怎么做?在数学上,我正在考虑找到平移和旋转矩阵的逆矩阵,然后在平移之前应用旋转,对吗?

4

1 回答 1

2

通常有几个转换将世界位置映射到屏幕。以下是最常见的:

  • 世界变换:可以应用于对象,以便相对于其他对象重新对齐它们。
  • 视图变换:经过此变换后,相机位于 O 并朝 z 方向看。
  • 投影变换:执行透视变换以模拟真实相机
  • 视口自适应:这基本上是一种缩放和平移,将范围 [-1, 1] 的位置映射到视口。这通常是屏幕的宽度和高度。

gluLookAt用于创建视图转换。您可以如下想象:将相机放置在场景中的某个位置。现在变换整个场景(使用相机),使相机位于原点,它面向 z 方向,y 轴代表向上方向。这是一个简单的刚体变换,可以表示为任意旋转(具有三个自由度)和任意平移(具有另外三个自由度)。每个刚体变换都可以拆分为单独的旋转和平移。如果您选择正确的值,甚至评估的顺序也会有所不同。转换可以用不同的方式来解释。我写了一篇博文不久前关于那个话题。如果你有兴趣,不妨看看它。虽然它适用于 DirectX,但数学与 OpenGL 几乎相同。你只需要注意转置矩阵。

对于第二个问题:是的,你是对的。你需要找到逆变换。这可以通过逆矩阵轻松实现。如果您指定视图矩阵 V 如下:

V = R_xyz * T_xyz

那么逆变换 V^-1 是

V^-1 = T_xyz^-1 * R_xyz^-1

但是,这不会将屏幕位置映射到世界位置,因为正在进行更多转换。我希望,这能回答你的问题。

这是另一个有趣的点。视图矩阵是在指定位置对齐相机模型(在原点,面向 z 方向)的变换的逆矩阵。这种关系称为系统转换与模型转换。

于 2013-02-25T21:38:26.853 回答