栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > Unity3D

Unity3D - Shader - 模型、世界、观察、裁剪空间坐标转换

Unity3D 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Unity3D - Shader - 模型、世界、观察、裁剪空间坐标转换

模型空间
模型空间(model space),也成为对象空间(object space)或局部空间(local space)。 每个模型都有自己的模型空间,当它旋转或移动时,模型空间也会随之移动
3dMax 导出 Obj 文件
世界空间
世界空间(world space)是一个宏观的特殊坐标系,其代表了我们关心的最大坐标系。在Unity中模型如果没有父节点,那么它就在世界空间内。

将顶点坐标从模型空间 转换到 世界空间,成为模型变换(model transform)。
Transform中的Position是该模型在世界空间中平移后的位置
Transform中的Rotation是模型在世界空间中旋转的值
Transform中的Scale则是模型在世界空间中缩放的值
变换顺序:缩放 -> 旋转 -> 平移
变换矩阵:

从 右-> 左 依次是:缩放,旋转,平移
这个矩阵负责将模型空间 的坐标转换到 世界空间
观察空间
观察空间(view space) 也被称为摄像机空间(camera space) 和其他空间不同的是观察空间使用的是右手坐标系,也就是:
+x 轴指的是右方
+y 轴指的是左方
+z 轴则是摄像机的后方
顶点变换的后一步就是从世界空间变换到观察空间中,这个变换叫做观察变换(view transform)
 

裁剪空间
顶点还需要从观察空间转换到裁剪空间((clip space,也叫作齐次裁剪空间):其矩阵是裁剪矩阵(clip matrix),也叫作投影矩阵(projection matrix)。
视椎体(view frustum)会决定对渲染图元的裁剪。它是决定摄像机可以看到的区域,由6个平面组成,称为裁剪平面,其中还有2个近裁剪平面(near clip plane)和远裁剪平面(far clip plane),他们2个平面决定了摄像机能看到的深度范围。
视椎体还有两种类型:透视投影(perspective projection)和正交投影(orthographic projection)
透视投影矩阵:


和投影矩阵不同的本质在于最后一行的分量不一样。同样,正交投影也会改变空间的旋向性。
屏幕空间
裁剪后需要进行真正的投影,需要把视椎体投影到屏幕空间空(screen space),最后会得到像素位置。

将顶点从裁剪空间投影到屏幕空间,来生成2D坐标。
第一步,需要进行齐次除法(homogeneous diision)
,就是使用齐次坐标系中的 w 分量去除以 x,y,z 分量,在OpenGL中这一步得到的坐标也被乘坐归一化的设备坐标(Normalized Device Coordinated, NDC).
把坐标从齐次裁剪坐标中转化到NDC中,最后的裁剪空间会变换到一个立方体中。分量范围在[-1, 1]。在Unity中,屏幕左下角是(0,0),右上角是(pixelWidth,pixelHeight),由于立方体内的坐标都是[-1,1],因此映射过程就是一个缩放的过程。

齐次除法和屏幕映射可以总结为下面的公式:
 

此外,从裁剪空间到屏幕空间的转换是由底层帮我们完成的。
总结
顶点着色器的最基本任务就是把顶点坐标从模型空间转换到裁剪空间中。
 




 

 

 



 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/898253.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号