笔者介绍:姜雪伟,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. PowerDisginer中NAME与COMMENT转换脚本

    Option Explicit ValidationMode = True InteractiveMode = im_Batch Dim mdl ' the current model ' get t ...

  2. JavaSript模块规范 - AMD规范与CMD规范介绍 (转)

    JavaSript模块化   在了解AMD,CMD规范前,还是需要先来简单地了解下什么是模块化,模块化开发?       模块化是指在解决某一个复杂问题或者一系列的杂糅问题时,依照一种分类的思维把问题 ...

  3. iOS开发 Swift开发数独游戏(一)

    一.前言 我姥姥是一名退休数学老师,一直很喜欢玩数独游戏.我以前答应过她要给她写一个数独游戏.本来计划是写一个Android应用的,但恰好我学了好长时间iOS开发一直没做什么"大项目&quo ...

  4. python定时执行方法

    1  time.sleep import time for i in range(5): print(i) time.sleep(10) 2 用shed import time import sche ...

  5. axure产品原型图,元件库导入方法

    axure是公司产品经理常用的软件,用来绘制产品原型图. 为了画出漂亮的原型图,需要各色各样的元件.因此导入各类元件库很有用处: 打开元件库视图: 载入元件库,选择事先下载好的元件 元件库下载:htt ...

  6. [转载] K3 K3c 最简单无损开壳方法

    只用一把螺丝刀就行了,其它什么撬棒  信用卡  撬片等 拆机工具一概不用.拆了5台,只有一台断了一个扣口. 1. 把底部4个螺丝拿掉.2.把路由如图放在桌子上,路由平行于身体,注意是立着放 使路由与桌 ...

  7. 从头认识java-14.4 Java提供的数组的有用功能(2)

    接着上一章节,我们继续介绍Java提供的数组的有用功能. 3.元素的对照Comparator package com.ray.ch14; import java.util.Arrays; import ...

  8. Java Enum的多态性

    转载自:http://pf-miles.iteye.com/blog/187155 Enum+多态,我没说错,不过Enum是不可以被继承的,也不可以继承自别人,只是能实现接口而已,何谈多态?不过还是先 ...

  9. go语言的一些特性

    go语言中如何判断一个方法是私有的还是公有的?说出来你可能不信,通过首字母的大小写. 不管是一个变量还是一个函数,如果它的首字母是大写的,那么它就是包外可见的,也就是说可以 从这个包的外面访问这个资源 ...

  10. hadoop错误总结

    1.hadoop3: mkdir: cannot create directory `/usr/local/hadoop/bin/../logs': Permission denied 把所有Data ...