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

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

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

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

由此可见,我们在生活中在不同的情况下使用不同的坐标空间。这个跟游戏中使用不同的空间是相似的。

Unity3D引擎开发3D游戏时。也会面临着各个坐标空间的变换,在这里给读者普及一下,这样开发人员再做一些空间变换时更easy上手。Unity3D引擎使用的是扩展名为FBX的模型,模型的制作是美术人员用建模工具Max制作完毕导出的,除了模型还包含图片,比方高光。法线等,关于材质的渲染能够使用Unity3D自带的Shader或者自己编写Shader。

制作的模型相对于它自身而言就是局部空间也称为模型空间,也称为局部空间,每一个模型都有自己独立的坐标空间。

当它移动或者旋转时。模型空间也会跟着它移动和旋转。

打个形象比喻,我们在公司的房间里面移动时,我们自身的空间也在跟着移动,当我们转身时,我们的坐标空间也在尾随变化。

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

孩子节点的坐标是(2,2。0)。它是子物体的局部坐标,以下会通过矩阵转换的方式,计算一下它在Unity中的世界坐标,也是快速读者怎样利用矩阵变换获取到在世界空间的世界坐标。在Unity3D引擎使用的是左手坐标系也就是Z轴朝里。X轴朝右。Y轴朝上。

将我们制作好的模型拖入到Unity编辑器后的效果例如以下所看到的:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvanh3MTY3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />

红色箭头表示的是X轴,绿色的箭头表示的是Y轴。蓝色的箭头表示的是Z轴。

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

我们能够构建出模型变换矩阵,在这里要注意一个问题,它们变换的顺序是一定的,不能改变。

先进行缩放,在进行旋转,最后进行位移操作。相应的矩阵变换例如以下所看到的:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvanh3MTY3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />

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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvanh3MTY3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />

也就是说。在世界空间下,模型的子孩子的位置是(9,4,18.0)这样我们通过矩阵变换就得到了子孩子的世界坐标,事实上这些基本运算我们在游戏开发中也是常常使用的。比方我们能够自己利用矩阵变换实现实时阴影,Unity3D自带的阴影因为消耗比較大,不easy在移动端实现,我们自己能够利用矩阵变换实现,效率得到提升。

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

Unity3D引擎之渲染技术系列一的更多相关文章

  1. Unity3d 引擎原理详细介绍

    体系结构 为了更好地理解游戏的软件架构和对象模型,它获得更好的外观仅有一名Unity3D的游戏引擎和编辑器是非常有用的,它的主要原则. Unity3D 引擎 Unity3D的是一个屡获殊荣的工具,用于 ...

  2. Unity3d 引擎原理详细介绍、Unity3D引擎架构设计

    体系结构 为了更好地理解游戏的软件架构和对象模型,它获得更好的外观仅有一名Unity3D的游戏引擎和编辑器是非常有用的,它的主要原则. Unity3D 引擎 Unity3D的是一个屡获殊荣的工具,用于 ...

  3. unity3d引擎程序员养成

    标准流程:1. c++ Primer 英文版(第四或第五版)全部看完习题做完是必须的.渲染程序设计比较复杂,后期会用到c++的全部特性.c++学的越好后面越轻松.要看英文版,计算机翻来覆去就那么几个单 ...

  4. 新书《Cocos2dx 3.x 3D图形学渲染技术讲解》问世

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

  5. Unity3D之高级渲染-Shader Forge增强版

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

  6. Unity3d 引擎原理详细介绍、Unity3D引擎架构设计 - zhibolife

    时间 2014-03-24 11:18:00  博客园-所有随笔区原文  http://www.cnblogs.com/zhibolife/p/3620440.html 体系结构 为了更好地理解游戏的 ...

  7. 剖析Unreal Engine超真实人类的渲染技术Part 1 - 概述和皮肤渲染

    一.概述 1.1 数字人类的概要 数字人类(Digital Human)是利用计算机模拟真实人类的一种综合性的渲染技术.也被称为虚拟人类.超真实人类.照片级人类. 它是一种技术和艺术相结合的综合性模拟 ...

  8. 剖析Unreal Engine超真实人类的渲染技术Part 2 - 眼球渲染

    目录 三.眼球渲染 3.1 眼球的构造及理论 3.1.1 眼球的构造 3.1.2 眼球的渲染理论 3.2 眼球的渲染技术 3.2.1 角膜的半透和光泽反射 3.2.2 瞳孔的次表面散射 3.2.3 瞳 ...

  9. Unity3d 基于物理渲染Physically-Based Rendering之最终篇

    前情提要: 讲求基本算法 Unity3d 基于物理渲染Physically-Based Rendering之specular BRDF plus篇 Unity3d 基于物理渲染Physically-B ...

随机推荐

  1. Strobogrammatic Number II -- LeetCode

    A strobogrammatic number is a number that looks the same when rotated 180 degrees (looked at upside ...

  2. Missing Ranges -- LeetCode

    Given a sorted integer array where the range of elements are [lower, upper] inclusive, return its mi ...

  3. SQLServer To MySQL 解决方案

        最近在忙一个项目,就不详写了.过两天不忙了把项目总结一下.   思路: Access作为桥梁   1.SQLServer To Access 2007 在access里直接导入 2.Use t ...

  4. Android Developer -- Bluetooth篇 开发实例之一 扫描设备

    第一步:声明Bluetooth Permissions <!-- 设置蓝牙访问权限 --> <uses-permission android:name="android.p ...

  5. debug with Linux slub allocator

     http://thinkiii.blogspot.jp/2014/02/debug-with-slub-allocator.html The slub allocator in Linux has ...

  6. Word中如何公式居中标号右对齐

    1.鼠标居中 2.插入一行三列表格 3.选中第一个表格,右键-表格属性-单元格-选项:然后回到单元格设置垂直居中,宽度为15%,同理第三个单元格,不过中间单元格也要设置,宽度为70%,这个word没有 ...

  7. Chrome的开发必备小技巧

    谷歌Chrome,是当前最流行且被众多web开发人员使用的浏览器.最快六周就更新发布一次以及伴随着它不断强大的开发组件,使得Chrome成为你必备的开发工具.例如,在线编辑CSS,console以及d ...

  8. DotnetBrowser高级教程-(4)使用MVC框架5-使用视图

    mvc框架理所当然的要支持view了,我们看下前面上传文件的地方,在展示页面时,我们使用了如下的代码: public string UploadImgPage() { return "< ...

  9. 【OpenGL4.0】GLSL渲染语言入门与VBO、VAO使用:绘制一个三角形 【转】

    http://blog.csdn.net/xiajun07061225/article/details/7628146 以前都是用Cg的,现在改用GLSL,又要重新学,不过两种语言很多都是相通的. 下 ...

  10. vertex buffer 数据结构 如何读vb的memory pool

    vertex attribute (declaration)    vertex stream (memory pool) 这两部分 通过attribute 里面对memory的描述把两部分 vbo ...