其他分享
首页 > 其他分享> > 模型空间,裁剪空间,世界空间

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

作者:互联网

写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冒号右边的数据就是顶点在裁剪空间的位置信息.

标签:模型,裁剪,矩阵,坐标,空间,观察
来源: https://www.cnblogs.com/melttt/p/15766488.html