轉自http://blog.csdn.net/u011473031/article/details/52448398
頂點着色器:
基本功能:就是把模型的頂點座標從模型空間轉換到齊次剪裁空間中。渲染過程可以理解成把一個一個頂點記過層層處理最終轉化到屏幕上的過程。
模型空間(Model Space):
模型空間也叫作 Object Space和Local Space(局部座標),也就是模型在移動旋轉的時候,模型空間也會跟着移動旋轉。
世界空間(World Space):
Unity中,世界空間使用的是左手座標系,如果一個模型沒有父節點,Transform屬性就是模型在世界空間中的位置
頂點變換-模型變換(Model Transform):
頂點變換的第一步就是將頂點座標從模型空間變換到世界空間中,這個變換也叫作模型變換(Model Transform)
比如求一個模型的手指在世界空間中的位置(已知模型中心在世界空間中位置,手指在模型空間中位置,通過矩陣可以求出手指在世界空間中位置),可以通過矩陣變換 P(world) = M(modsl)P(modsl)
觀察座標(View Space)
觀察空間也叫作攝像機空間(Camera Space)。觀察空間可以認爲是模型空間的一個特例-在所有模型中有一個特殊的模型即攝像機爲中心的空間
剪裁空間(Clip Space)(投影矩陣-projection matrix)
通過視錐體進行剪裁,視錐體設計兩種投影類型-一種是正交投影(orthographic projection),一種是透視投影(perspective projection),透視投影是一個金字塔形,正交投影是一個長方體。
屏幕空間(Screen Space)
觀察空間(三維)到屏幕空間(二維)的轉換要經過投影操作(projection),進過投影變換後,我們可以進行剪裁操作,當完成所有的剪裁操作之後,就把視錐體投影到屏幕空間中。進過這個變換我們得到真正的像素位置。而不是虛擬的三維座標。
在Unity中,從剪裁空間到屏幕空間的轉換是由Unity幫我們完成的,我們的頂點着色器只需要把頂點轉換到剪裁空間中,然後unity自動轉換到屏幕空間。
總結:模型到屏幕經過的轉換如下
- 模型空間–>世界空間–>觀察空間–>剪裁空間–>屏幕空間
- 其中:模型空間–>世界空間–>觀察空間–>剪裁空間 分別進過 MVP矩陣進行變換
- 剪裁空間–>屏幕空間是由Unity自動完成的。
- 除觀察座標用的是右手座標系,其他都用左手座標系
- 在頂點着色器中,通常串聯成一個矩陣,即MVP矩陣,用於將頂點從模型空間轉換到剪裁空間中。
最後,在頂點着色器中,通常串聯成一個矩陣,即MVP矩陣,用於將頂點從模型空間轉換到剪裁空間中。