笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。

CSDN视频网址:http://edu.csdn.net/lecturer/144

在学习Unity引擎或者是其他3D游戏引擎时,经常遇到的问题就是各个坐标空间,在以前的博客中也给读者介绍过,本篇博客里用通俗易懂的语言再给读者揭露一下为什么需要这么多坐标空间?以及如何产生矩阵变换或者说利用矩阵变换解决问题。

在生活中我们经常遇到问路的,有的人方向感比较强,而有的人方向感比较弱,针对这些人指路时就要注意了,方向感强的人,你可以告诉他向东走大约300米,再向北走100米,你给他说的这些就是以东南西北为坐标轴介绍的,方向感弱的人,你就不能这么说了,你只能说向向前走300米,再向左走100米,这时你使用的是以这个路人围原点的坐标空间,通过这个案例,你可以看到不同的指路方式对应的就是我们不同的坐标轴向。由此可见,我们在生活中在不同的情况下使用不同的坐标空间,这个跟游戏中使用不同的空间是类似的。

Unity3D引擎开发3D游戏时,也会面临着各个坐标空间的变换,在这里给读者普及一下,这样开发者再做一些空间变换时更容易上手。Unity3D引擎使用的是扩展名为FBX的模型,模型的制作是美术人员用建模工具Max制作完成导出的,除了模型还包括图片,比如高光,法线等,关于材质的渲染可以使用Unity3D自带的Shader或者自己编写Shader。制作的模型相对于它自身而言就是局部空间也称为模型空间,也称为局部空间,每个模型都有自己独立的坐标空间。当它移动或者旋转时,模型空间也会跟着它移动和旋转。打个形象比喻,我们在公司的房间里面移动时,我们自身的空间也在跟着移动,当我们转身时,我们的坐标空间也在跟随变化。

在模型制作时,美术人员会给模型一个坐标,默认的情况下都是设置成(0,0,0),这个坐标是作为父节点的坐标,模型会有自己的孩子节点,假设带有孩子节点的物体如下图所示:

孩子节点的坐标是(2,2,0),它是子物体的局部坐标,下面会通过矩阵转换的方式,计算一下它在Unity中的世界坐标,也是高速读者如何利用矩阵变换获取到在世界空间的世界坐标。在Unity3D引擎使用的是左手坐标系也就是Z轴朝里,X轴朝右,Y轴朝上。将我们制作好的模型拖入到Unity编辑器后的效果如下所示:

红色箭头表示的是X轴,绿色的箭头表示的是Y轴,蓝色的箭头表示的是Z轴。它在世界场景中的坐标是(0,0,0)换句话说就是它自身的局部坐标与世界坐标重合。它的孩子节点是我们上面提到过的,下面我们将模型进行位移,旋转,缩放进行操作,我们进行缩放(2,2,2),旋转(0,150,0),位移(5,0,25),在Unity的表现效果如下所示:

我们可以构建出模型变换矩阵,在这里要注意一个问题,它们变换的顺序是一定的,不能改变。先进行缩放,在进行旋转,最后进行位移操作。相应的矩阵变换如下所示:

接下来我们对模型的子物体进行模型变换如下:

也就是说,在世界空间下,模型的子孩子的位置是(9,4,18.0)这样我们通过矩阵变换就得到了子孩子的世界坐标,其实这些基本运算我们在游戏开发中也是经常使用的,比如我们可以自己利用矩阵变换实现实时阴影,Unity3D自带的阴影由于消耗比较大,不容易在移动端实现,我们自己可以利用矩阵变换实现,效率得到提升。

后面继续介绍观察空间的矩阵实现。

Unity3D引擎之渲染技术系列一相关推荐

  1. Unity3D引擎之渲染技术系列四

    笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D ...

  2. Unity3D引擎之渲染技术系列三

    笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D ...

  3. Unity3D引擎之渲染技术系列六

    笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D ...

  4. Unity3D引擎之渲染技术系列

    http://blog.csdn.net/jxw167/article/details/69426574 图片渲染模式

  5. unity3d引擎缓存优化技术_Unity3d资源解决方案之AssetBundle

    1.什么是AssetBundle AssetBundle 是Unity pro提供的一种用来存储资源的文件格式,它可以存储任意一种Unity引擎能够识别的资源,如Scene.Mesh.Material ...

  6. Unity3D引擎之高级渲染技术

    笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人,已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社 和<Unity3 ...

  7. 基于物理的渲染技术(PBR)系列一

    笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D ...

  8. 基于物理的渲染技术(PBR)系列三

    笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D ...

  9. 技术系列课|从0到1 构建实时音视频引擎

    随着5G和AI时代的到来,在线实时互动在越来越多的场景中被使用,支撑这一功能实现的关键性技术--RTC也受到了空前的关注.本节技术系列课,来自网易云信的讲师将以做菜的过程为比喻,深入浅出地讲述如何从0 ...

最新文章

  1. 前端:JS中JSON对象和String转换
  2. 自考18年4月计算机应用基础,2019年自学考试计算机应用基础试题(18)
  3. 变成小白的第一本Python入门书,第五章循环与判断课后题答案
  4. win8计算机如何取消系统更新,Win7/Win8电脑如何去掉Win10升级提示
  5. 跳转后退_羽毛球后退步法常见问题及解决方法
  6. linux 比较内容,Linux命令比较文件内容
  7. 最简单的WebService
  8. 洛谷 P2894 酒店 Hotel
  9. Pacemaker 安装与使用
  10. python封包和解包_python解析网络封包方法
  11. C++输出平行四边形和菱形
  12. 存储IP地址,到底用什么数据类型相对比较好
  13. 从小米5看雷军式“互联网思维”的黄昏
  14. 恢复误删excel工作薄中的表格
  15. 从《雪白血红》说起(2)
  16. Linux必会100个命令(十六)ping、nc
  17. CMake添加pthread.h
  18. 基于MATLAB的声信号的采集与分析,基于Matlab的声音信号采集与分析处理
  19. 用Linux+IPChains代替Windows+WinGate
  20. 详解MySQL之事务

热门文章

  1. pyqt5 良心教程
  2. c语言认知报告,C语言认识实习报告.doc
  3. DB307S-ASEMI整流桥DB307S
  4. 单限物计算机类男女,计算机类(B0809、A0812、A0854)为什么是神?
  5. Python数据分析与案例教程:分析人口普查数据-欧阳桫-专题视频课程
  6. Android打开微信本地数据库详细步骤二
  7. 电脑蓝屏自动关机(方法篇----非系统原因)
  8. W5500初始化过程
  9. IDEA如何调节成中文界面
  10. python读取html中的表格数据_Python 数据处理(十八)—— HTML 表格