三維投影是將三維空間中的點映射到二維平面上的方法。由於目前絕大多數圖形數據的顯示方式仍是二維的,因此三維投影的應用相當廣泛,尤其是在計算機圖形學,工程學和工程製圖中。
- 三維圖形平面投影
- 平行投影:投影中心與投影平面的距離是無限的,投影線相互平行
- 正投影(正交投影):投影線垂直於投影平面
- 多視圖投影:物體的坐標面與投影面平行,正視圖、側視圖、俯視圖
- 軸測投影:物體的三個坐標面或坐標軸與投影面均不平行
- 正等軸測投影(正等測):投影時三個坐標軸等比例縮放,投影面坐標軸夾角120°
- 正二軸測投影(正二測):投影時兩個坐標軸等比例縮放,第三個坐標軸縮放比例不同
- 正三軸測投影(正三測):投影時三個坐標軸縮放比例均不相等
- 斜投影:投影線不垂直於投影平面
- 斜等軸測投影(斜等測)
- 斜二軸測投影(斜二測)
- 斜三軸測投影(斜三測)
- 透視投影:投影中心與投影平面的距離是有限的
平行投影是投影線相互平行的投影。若投影線垂直於投影面則稱正投影,若投影面傾斜於投影面則稱斜投影。
正交投影是一系列用於顯示三維物體的輪廓、細節或精確測量結果的變換方法。通常又稱作截面圖、鳥瞰圖或立面圖。
當視平面的法向(即攝像機的朝向)平行於笛卡爾坐標系三根坐標軸中的一根,數學變換定義如下:
若使用一個平行於y軸(側視圖)的正交投影將三維點
,
,
投影到二維平面上得到二維點
,
,可以使用如下公式
![{\displaystyle b_{x}=s_{x}a_{x}+c_{x}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/63e26c9929dfe6866eb982480933df74bb43dfa1)
![{\displaystyle b_{y}=s_{z}a_{z}+c_{z}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/67fd4ae4cef837cc5775c1f6fa0f19374b8f4dd4)
其中向量s是一個任意的縮放因子,而c是一個任意的偏移量。這些常量可自由選擇,通常用於將視口調整到一個合適的位置。該投影變換同樣可以使用矩陣表示(為清晰起見引入臨時向量d)
![{\displaystyle {\begin{bmatrix}{d_{x}}\\{d_{y}}\\\end{bmatrix}}={\begin{bmatrix}1&0&0\\0&0&1\\\end{bmatrix}}{\begin{bmatrix}{a_{x}}\\{a_{y}}\\{a_{z}}\\\end{bmatrix}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/dba6a0285530d858b657ff49d7c8ca4855c3b9cd)
![{\displaystyle {\begin{bmatrix}{b_{x}}\\{b_{y}}\\\end{bmatrix}}={\begin{bmatrix}{s_{x}}&0\\0&{s_{z}}\\\end{bmatrix}}{\begin{bmatrix}{d_{x}}\\{d_{y}}\\\end{bmatrix}}+{\begin{bmatrix}{c_{x}}\\{c_{z}}\\\end{bmatrix}}.}](https://wikimedia.org/api/rest_v1/media/math/render/svg/f2934d79833b025fb4b1e997369fa92306deff58)
雖然正交投影產生的圖像在一定程度上反映了物體的三維特性,但此類投影圖像和實際觀測到的並不相同。特別是對於相同長度的平行線段,無論離虛擬觀察者(攝像機)遠近與否,它們都會在正交投影中顯示為相同長度。這會導致較近的線段看起來被縮短了。
斜投影不像正交投影一樣投影線垂直於投影面,而是投影線與投影面成非90度的斜角。
透視投影的定義更為複雜。可以將其理解為透過攝像機取景器對於被投影物體進行觀察。攝像機的位置、朝向和視野都將影響投影變換的結果。我們定義以下變量來對這一變換進行描述:
:將被投影的三維空間中的點。
:攝像機的位置。
:攝像機的旋轉角度。當
=<0,0,0>且
=<0,0,0>, 三維向量<1,2,0>將被投影到二維向量<1,2>。
:觀測者相對顯示平面的位置。[1]
最終結果為:
:
所產生的二維投影。
首先我們定義點
作為點
向攝像機坐標系所作的變換,其中攝像機坐標系由攝像機的位置
和旋轉
所決定。該過程為:先用
減去
,然後使用由
產生的旋轉矩陣乘上該結果。該變換通常稱為攝像機變換(注意該計算過程假設使用左手法則):
[2]
[3]
[4]
或者使用以下這種非矩陣表示的形式,其中角度的正負號與矩陣表示形式不同:
![{\displaystyle {\begin{array}{lcl}d_{x}&=&\cos \theta _{y}\cdot (\sin \theta _{z}\cdot (a_{y}-c_{y})+\cos \theta _{z}\cdot (a_{x}-c_{x}))-\sin \theta _{y}\cdot (a_{z}-c_{z})\\d_{y}&=&\sin \theta _{x}\cdot (\cos \theta _{y}\cdot (a_{z}-c_{z})+\sin \theta _{y}\cdot (\sin \theta _{z}\cdot (a_{y}-c_{y})+\cos \theta _{z}\cdot (a_{x}-c_{x})))+\cos \theta _{x}\cdot (\cos \theta _{z}\cdot (a_{y}-c_{y})-\sin \theta _{z}\cdot (a_{x}-c_{x}))\\d_{z}&=&\cos \theta _{x}\cdot (\cos \theta _{y}\cdot (a_{z}-c_{z})+\sin \theta _{y}\cdot (\sin \theta _{z}\cdot (a_{y}-c_{y})+\cos \theta _{z}\cdot (a_{x}-c_{x})))-\sin \theta _{x}\cdot (\cos \theta _{z}\cdot (a_{y}-c_{y})-\sin \theta _{z}\cdot (a_{x}-c_{x}))\\\end{array}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/c3469af63e4264d6a806576df1c794210d183c59)
然後將變換後的該點通過以下方程投影到二維平面(此處投影平面為x/y平面,有時也使用x/z):[5]
![{\displaystyle {\begin{array}{lcl}\mathbf {b} _{x}&=&(\mathbf {d} _{x}-\mathbf {e} _{x})(\mathbf {e} _{z}/\mathbf {d} _{z})\\\mathbf {b} _{y}&=&(\mathbf {d} _{y}-\mathbf {e} _{y})(\mathbf {e} _{z}/\mathbf {d} _{z})\\\end{array}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/d66191db1d23684b243322417254ae3cb6d03a71)
或在齊次坐標系下可以表示為:
![{\displaystyle {\begin{bmatrix}\mathbf {f} _{x}\\\mathbf {f} _{y}\\\mathbf {f} _{z}\\\mathbf {f} _{w}\\\end{bmatrix}}={\begin{bmatrix}1&0&0&-\mathbf {e} _{x}\\0&1&0&-\mathbf {e} _{y}\\0&0&1&0\\0&0&1/\mathbf {e} _{z}&0\\\end{bmatrix}}{\begin{bmatrix}\mathbf {d} _{x}\\\mathbf {d} _{y}\\\mathbf {d} _{z}\\1\\\end{bmatrix}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/5481ab4d4e4418cfe77362cdac787f19c41b19b4)
和
![{\displaystyle {\begin{array}{lcl}\mathbf {b} _{x}&=&\mathbf {f} _{x}/\mathbf {f} _{w}\\\mathbf {b} _{y}&=&\mathbf {f} _{y}/\mathbf {f} _{w}\\\end{array}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/6c4671eaabae641a127ee63db971ed12eaf992a0)
觀測者到顯示平面的距離,
,直接關係到視野的大小。
為可視角度。(這裡假設屏幕的兩角為(-1,-1)和(1,1))
如果要在一些特定的顯示設備上顯示該二維平面,之後還要進行一些必要的剪裁和縮放操作。
計算三維空間中位於Ax,Az的點在屏幕坐標x軸的位置:
對於y軸同樣有:
(其中Ax和Ay是透視轉換前物體在空間中的坐標)
- ^ Ingrid Carlbom, Joseph Paciorek, Planar Geometric Projections and Viewing Transformations, ACM Computing Surveys, 1978, 10 (4): 465–502, doi:10.1145/356744.356750 .
- ^ Riley, K F. Mathematical Methods for Physics and Engineering. Cambridge University Press. 2006: 931,942. ISBN 0521679710. doi:10.2277/0521679710.
- ^ Goldstein, Herbert. Classical Mechanics 2nd Edn.. Reading, Mass.: Addison-Wesley Pub. Co. 1980: 146–148. ISBN 0201029189.
- ^ Rotation About an Arbitrary Axis in 3 Dimensions (頁面存檔備份,存於網際網路檔案館) Glenn Murray 2013-6-6 [2014-4-23]
- ^
Sonka, M; Hlavac, V; Boyle, R, Image Processing, Analysis & Machine Vision 2nd Edn., Chapman and Hall: 14, 1995, ISBN 0412455706