Processing math: 100%

View Transformation

假设此时:

  • 已经做完model transformation,即物体已经摆好。
  • 相机的位置已先好,即相机和物体的相对关系是确定的。

现在要做的是:

  • 通过旋转、平移缩放等操作的组合,调整相机使其处于指定状态,为了便于后面的计算。
  • 同时调整物体,保持相机和物体的相对关系不变。

定义camera的view

说明camera当前的view期望的view
position摄像机位置e原点
gaze direction摄像机朝向ˆg-Z轴(0,0,-1)
up direction摄像机向上的方向ˆtY轴(0,1,0)

我们期望一个摄像机(view)能够有如上参数,这样方便计算,但是真实的camera view不会和我们期望的相同,所以我们需要对camera的上述三个向量做转换,使得camera的view参数达到预期。

view的变换

目的:通过旋转、平移缩放等操作的组合,调整相机使其处于指定状态。

  • 平移:e平移到origin
  • 旋转:g->-Z, t->Y, g×t->X
  • 缩放:此处不涉及缩放

平移

平移 e 到原点:

需要计算:原点 = Tviewe

用齐次坐标表达:

[0001]=[100?010?001?0001][xeyeze1]

解得:

Tview=[100xe010ye001ze0001]

旋转

ˆgˆt 旋转到-Z轴和Y轴,直接求出旋转矩阵 R 并不容易,但是由-Z轴和Y轴旋转到 ˆgˆt 就比较简单了,当我们得到 R1 后,进行逆运算,就能得到 R了,R=(R1)T

R1view=[xˆg׈txtxg0yˆg׈tytyg0zˆg׈tztzg00001]

Rview=[xˆg׈tyˆg׈tzˆg׈t0xtytyg0xgygzg00001]

旋转 + 平移

通过对camera进行旋转和平移,使camera满足指定view旋转与平移结合的方式有两种:

  1. 先旋转后平移
  2. 先平移后旋转

根据常识可知,应该先平移再旋转。

因此有变换矩阵:

Mview=RviewTview


本文出自CaterpillarStudyGroup,转载请注明出处。
https://caterpillarstudygroup.github.io/GAMES101_mdbook/