【问题标题】:I try to understand the View Matrix in OpenGL我尝试理解 OpenGL 中的视图矩阵
【发布时间】:2017-01-07 01:12:45
【问题描述】:

我尝试在 OpenGL 中构建自己的View Matrix

我正在关注此链接 https://www.opengl.org/sdk/docs/man2/xhtml/gluLookAt.xml

根据 OpenGL 文档,我有以下内容。

眼睛位置 = eye(xe, ye, ze) 中心位置 = cen(0, 0, 0)

up = up(xu, yu, zu). (e.g. up = (0, 1, 0))

前向向量

f' = cen - eye = (0, 0, 0) - (xe, ye, ze) = (-xe, -ye, -ze)

边向量

s' = f' x up

我不明白为什么 f' x up,为什么不 up x f'

u' = s' x f'

我不明白为什么 u' = s' x f',为什么不 u' = f' x s'

我们标准化 s', u', f'

s = norm(s'), u = norm(u'), f=norm(f')

我们构造旋转矩阵 以行为主(我们在代数课上学到的)

R = 
s_x u_x f_x 0
s_y u_y f_y 0
s_z u_z f_z 0
0   0    0  1

平移矩阵:

T = 
1 0 0 x
0 1 0 y
0 0 1 z
0 0 0 1

我们知道

M = T*R
View Matrix V = invert(M)
V = invert(T*R) = invert(R)invert(T)
V = transpose(R)invert(T) 

transpose(R) = 
s_x s_y s_z 0
u_x u_y u_z 0
f_x f_y f_z 0
0   0    0  1


invert(T) = 
1 0 0 -x
0 1 0 -y
0 0 1 -z
0 0 0 1

所以

View Matrix V = transpose(R)invert(T)

但是从 OpenGL 文档中,f 更改为 -f

旋转变为跟随

R = 
s_x u_x -f_x 0
s_y u_y -f_y 0
s_z u_z -f_z 0
0   0    0  1

我不明白为什么我们需要将前向向量改为负数。

【问题讨论】:

    标签: opengl matrix


    【解决方案1】:

    叉积订单只是从其定义中得出的。就像它一样。您正在设置右手坐标系。因此,如果您将右手的拇指与第一个因子对齐,食指与第二个因子对齐,那么中指将指向叉积的方向(垂直于两者)。这个真的没什么好说的了。

    并且由于您要设置右手坐标系,因此必须将相机的前进方向映射到负 z 方向。这就是旋转矩阵的第三列被反转的原因。如果你不这样做,你最终会得到一个左手坐标系,相机在正 z 轴的方向上看。

    【讨论】:

      猜你喜欢
      • 2015-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多