1. 程式人生 > >計算機圖形學------空間攝像機

計算機圖形學------空間攝像機

攝像機簡介

物體在世界中是使用絕對座標的,但是人認識世界是相對的,即從不同的角度觀察會產生不同的效果,因此需要引入攝像機的概念,來預設人眼的觀察。通過一個攝像機的變換矩陣,把世界座標對映到攝像機座標中,形成人觀察到實體的具體位置情況。

確定攝像機引數

攝像機和空間物體是不同的。空間物體確定是根據給出一個絕對座標系和三個軸相對於慣性系的方向,然後再進行確定的,但是攝像機比較複雜,因為攝像機需要確定位置,同時還有視線的方向。

給出一個新的定義方式, c a

m P o s \bf{camPos} 表示攝像機空間的位置, c a m T
a r g e t \bf{camTarget}
表示攝像機的觀察的焦點,給出攝像機的反方向 c a
m D i r = c a m P o s c a m T a r g e t \bf{camDir}=\bf{camPos}-\bf{camTarget}
,給出一個上軸 u p \bf{up} ,表示世界的 y y 軸的方向,當然,也可以是和y軸夾角小於90度的。

需要給出攝像機的右軸 c a m R i g h t \bf{camRight} ,右軸和 c a m D i r \bf{camDir} 垂直,指向右側,如下圖紅色的向量:
在這裡插入圖片描述
還需要一個攝像機的上軸向量 c a m U p \bf{camUp}

給出基本的變換演算法

  1. 根據需要,自定義 c a m P o s \bf{camPos} c a m T a r g e t \bf{camTarget}
  2. c a m D i r = c a m T a r g e t c a m P o s \bf{camDir}=\bf{camTarget}-\bf{camPos} ,把 c a m D i r \bf{camDir} 標準化。
  3. c a m R i g h t = u p × c a m D i r \bf{camRight}=\bf{up}\times\bf{camDir} ,把 c a m R i g h t \bf{camRight} 標準化
  4. c a m U p = c a m D i r × c a m R i g h t \bf{camUp}=\bf{camDir}\times\bf{camRight} c a m U p \bf{camUp} 標準化

× \times 表示向量的叉乘,其次座標系是4維的,叉乘的時候,忽略掉第四個引數,只需要進行x y z座標組成向量叉乘即可。

世界座標變換到攝像機座標

根據上一步驟的基本操作,得到基本的變換矩陣 L o o k A t \bf{LookAt}
L o o k A t = [ R x R y R z 0 U x U y U z 0 D x D y D z 0 0 0 0 1 ] [ 1 0 0 P x 0 1 0 P y 0 0 1 P z 0 0 0 1 ] \bf{LookAt}= \begin{bmatrix} \bf{R_x} & \bf{R_y} & \bf{R_z} & 0 \\ \bf{U_x} & \bf{U_y} & \bf{U_z} & 0\\ \bf{D_x} & \bf{D_y} & \bf{D_z} & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} 1 & 0 & 0 & -\bf{P_x} \\ 0 & 1 & 0 & -\bf{P_y}\\ 0 & 0 & 1 & -\bf{P_z} \\ 0 & 0 & 0 & 1 \end{bmatrix}
其中 R \bf{R} 是右軸的分量、 U \bf{U} 是攝像機上軸的分量、 D \bf{D} c a m D i r \bf{camDir} 的分量, P \bf{P} 是位置的分量。

L o o k A t \bf{LookAt} 矩陣乘以世界位置座標即可得到相機位置座標