模型空间,裁剪空间,世界空间
写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冒号右边的数据就是顶点在裁剪空间的位置信息.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)