模型空間,裁剪空間,世界空間


寫shader的時候經常碰到模型空間坐標轉裁剪空間坐標,裁剪空間坐標轉世界空間坐標的需求.

模型空間

模型空間也被稱為對象空間和局部空間.簡單地可以理解為建模的時候規定好的一系列坐標.

世界空間

在unity中,如果一個gameObject沒有父物體,則它的transform.position就是世界空間的坐標.

如果有父物體,則它的transform.position是父物體模型空間下的坐標,而不是世界空間的位置.

觀察空間

觀察空間也被稱作攝像機空間
與模型和世界空間不同的是,觀察的空間的+z軸指向攝像機的后方,攝像機的前方是-z軸.

加入當前camera相對於原點的坐標為transform.position.xyz,那么相當於在世界空間內平移了(+8.25,+0.62,-10)
要找到世界空間到觀察空間的矩陣時,相當於將這個平移做的逆變換,即(-8.25,-0.62,+10),如果有旋轉情況,則矩陣 M(世界空間到觀察空間) =[旋轉矩陣][平移矩陣].
觀察空間的是右手坐標系,所以矩陣Z方向需要取反

裁剪空間

裁剪過程中,位於空間內的圖元被保留,位於空間外的圖元被剔除.裁剪的過程遵循正交投影和透視投影矩陣運算.
頂點從觀察空間到裁剪空間的矩陣叫裁剪矩陣.

屏幕空間

將裁剪空間坐標投影到屏幕空間坐標,使用齊次除法.

其他

在unity shader中,坐標從模型->世界->觀察->裁剪這一步其實是封裝好了的,

struct v2f{
    //用於在頂點和片元着色器之間傳遞信息
     float4 pos : SV_POSITION;
     float2 uv : TEXCOORD0;

};
v2f vert(a2v v){
  v2f o;
  o.pos = mul(UNITY_MATRIX_MVP,v.vertex);
  return o;
}

SV_POSITION告訴unity,pos冒號右邊的數據就是頂點在裁剪空間的位置信息.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM