1, 向量
2, 矩陣
3, 歐拉角
4, 四元數(shù)
5, 坐標(biāo)系變換
6, 齊次坐標(biāo)與透視變換的推導(dǎo)
- 齊次坐標(biāo)
向量和點(diǎn)在同一個基下就有不同的表達(dá):3D向量的第4個代數(shù)分量是0歹叮,而3D點(diǎn)的第4個代數(shù)分量是1遥倦。像這種這種用4個代數(shù)分量表示3D幾何概念的方式是一種齊次坐標(biāo)表示捌治。
"齊次坐標(biāo)表示是計(jì)算機(jī)圖形學(xué)的重要手段之一,它既能夠用來明確區(qū)分向量和點(diǎn),同時也更易用于進(jìn)行仿射(線性)幾何變換鹿驼。"-- F.S. Hill, JR
- 透視變換
透視投影變換由兩步組成:
1) 裁剪: 用透視變換矩陣把頂點(diǎn)從視錐體中變換到裁剪空間的CVV中
2) 透視除法: CVV裁剪完成后進(jìn)行透視除法
- 推導(dǎo)
http://blog.sina.com.cn/s/blog_74eb759d0100odej.html
http://blog.sina.com.cn/s/blog_74eb759d0100ogsd.html
7,仿射變換矩陣
計(jì)算機(jī)圖形學(xué)中的應(yīng)用非常廣泛的變換是一種稱為仿射變換的特殊變換紊婉,在仿射變換中的基本變換包括平移、旋轉(zhuǎn)德召、縮放白魂、剪切這幾種
- 繞X軸旋轉(zhuǎn)
在三維場景中,當(dāng)一個點(diǎn)P(x,y,z)繞x軸旋轉(zhuǎn)θ角得到點(diǎn)P’(x’,y’,z’)上岗。由于是繞x軸進(jìn)行的旋轉(zhuǎn)福荸,因此x坐標(biāo)保持不變,y和z組成的yoz(o是坐標(biāo)原點(diǎn))平面上進(jìn)行的是一個二維的旋轉(zhuǎn)肴掷,可以參考上圖(y軸類似于二維旋轉(zhuǎn)中的x軸敬锐,z軸類似于二維旋轉(zhuǎn)中的y軸),于是有:
x′=x
y′=ycosθ?zsinθ
z′=ysinθ+zcosθ
寫成(4x4)矩陣的形式 :
- 繞Y軸旋轉(zhuǎn)
繞Y軸的旋轉(zhuǎn)和繞X軸的旋轉(zhuǎn)類似呆瞻,Y坐標(biāo)保持不變台夺,除Y軸之外,ZOX組成的平面進(jìn)行一次二維的旋轉(zhuǎn)(Z軸類似于二維旋轉(zhuǎn)的X軸痴脾,X軸類似于二維旋轉(zhuǎn)中的Y軸颤介,注意這里是ZOX,而不是XOZ赞赖,觀察上圖中右手系的圖片可以很容易了解到這一點(diǎn))滚朵,同樣有:
x′=zsinθ+xcosθ
y′=y
z′=zcosθ?xsinθ
寫成(4x4)矩陣的形式 :
- 繞Z軸旋轉(zhuǎn)
與上面類似,繞Z軸旋轉(zhuǎn)前域,Z坐標(biāo)保持不變始绍,xoy組成的平面內(nèi)正好進(jìn)行一次二維旋轉(zhuǎn)(和上面討論二維旋轉(zhuǎn)的情況完全一樣)
- 推導(dǎo)過程
7,世界坐標(biāo)變換要先縮放、后旋轉(zhuǎn)话侄、再平移的原因
一個三維場景中的各個模型一般需要各自建模亏推,再通過坐標(biāo)變換放到一個統(tǒng)一的世界空間的指定位置上。 這個過程在 3D 圖形學(xué)中稱作“世界變換” 年堆。 世界變換有三種吞杭,平移、旋轉(zhuǎn)和縮放 (實(shí)際還有不常用的扭曲和鏡像变丧,它們不是affine變換)芽狗。 這三種變換按各種順序執(zhí)行,結(jié)果是不同的痒蓬。 可是實(shí)際的應(yīng)用中一般按照 縮放 -> 旋轉(zhuǎn) -> 平移的順序進(jìn)行童擎。 這樣做的原因是可以獲得最符合常理的變換結(jié)果滴劲。
比方說,通過世界變換希望獲得的結(jié)果可能是:
將一個放在原點(diǎn)的物體(比方說可樂罐)移動到(30顾复,50)班挖,讓它自身傾斜 45 度,再放大 2 倍芯砸。
而不希望的結(jié)果是:
和本地坐標(biāo)軸成角度的縮放(會導(dǎo)致扭曲萧芙,像踩扁的可樂罐)。
繞自己幾何中心以外位置的原點(diǎn)的旋轉(zhuǎn) (地球公轉(zhuǎn)式) 和縮放假丧。
而顛倒了上述變換順序就會得到這樣不自然的結(jié)果双揪。
具體的說:
當(dāng)縮放在旋轉(zhuǎn)之后進(jìn)行時,會發(fā)生現(xiàn)象1包帚。
當(dāng)縮放和旋轉(zhuǎn)在平移之后進(jìn)行時會發(fā)生現(xiàn)象2渔期。
這時因?yàn)椋?br> 在物體剛剛放入世界坐標(biāo)系的時候使用的是本地坐標(biāo),也就是本地和全局坐標(biāo)系的原點(diǎn)和坐標(biāo)軸都是重合的(當(dāng)然兩者分別使用了左右手坐標(biāo)系時除外 - 那是BUG)渴邦,此時所有物體都“把世界坐標(biāo)系當(dāng)做自己的本地坐標(biāo)系”擎场。
而經(jīng)過了坐標(biāo)變換之后:
縮放變換不改變坐標(biāo)軸的走向,也不改變原點(diǎn)的位置几莽,所以兩個坐標(biāo)系仍然重合迅办。
旋轉(zhuǎn)變換改變坐標(biāo)軸的走向,但不改變原點(diǎn)的位置章蚣,所以兩個坐標(biāo)系坐標(biāo)軸不再處于相同走向站欺。
平移變換不改變坐標(biāo)軸走向,但改變原點(diǎn)位置纤垂,兩個坐標(biāo)系原點(diǎn)不再重合矾策。
這樣就可以解釋問什么縮放不能在旋轉(zhuǎn)之后,而縮放和旋轉(zhuǎn)都不能在平移之后了峭沦。 于是沒有問題的順序只能是 縮放 -> 旋轉(zhuǎn) -> 平移 贾虽。