Unity3D开发之Matrix4x4矩阵变换

在Unity开发中时常会用到Matrix4x4矩阵来变换场景中对象的位置、旋转和缩放。但是很多人都不太理解这儿Matrix4x4变换矩阵。通过DX中的变换矩阵我来讲一讲在unity中这个变换矩阵是怎么变换的。

在三维图形程序中,我们可以用几何变换来达到以下目的:

  • 表示一个对象相对于另一个对象的位置。
  • 旋转和安排对象的大小。
  • 改变视维、方向和透视方法。

  你可以使用一个4×4的矩阵将任何点变换到另一个点。下面的例子中,我们用一个矩阵对点(x, y, z)进行变化,产生了一个新的点(x‘, y‘, z‘):

  对点(x, y, z)进行一下运算,会得到一个新点(x‘, y‘, z‘):

  最常用的变换包括:平移(translation),旋转(rotation)和缩放(scaling)。你可以将这些变换合并起来,组成一个矩阵,同时进行几种变换。

矩阵以行列号的形式来描述。

沿每个坐标轴同时进行缩放时(我们称为统一缩放uniform scaling),矩阵如下所示:

下面的变化将一个点(x, y, z)平移到另一个点(x‘, y‘, z‘):

下面的变换将一个点(x, y, z)沿x-轴进行旋转,得到了一个新的点(x‘, y‘, z‘):

  下面的变化沿y-轴进行旋转:

  下面的变换沿z-轴进行旋转:

  这里要注意一点,希腊字母θ代表旋转的角度,用弧度来表示。从旋转轴向原点看,这个角度按顺时针方向来度量。

我们使用矩阵的一个最大好处就是可以通过矩阵相乘来将几个矩阵变换的效果合并起来。这就是说,当我们对一个模型进行旋转和平移时,不再需要用到两个矩阵。我们可以通过将旋转矩阵与平移矩阵相乘来得到一个合并的矩阵。这一过程就被称为矩阵级联,可以用下面的公式来表示:

  共识中,C指组合之后产生的新矩阵,M1Mn表示要组合在一起的每一个矩阵。一般情况下,我们指将两或三个矩阵组合起来,但实际上是没有限制的。  Matrix4x4类中有一个Matrix4x4.operator * 辅助函数来进行矩阵级联运算。  在进行矩阵级联时,我们应该注意级联时的顺序。上面公式 中反映的是一种从右到左的矩阵级联规则。也就是说,我们用来创建一个合并的矩阵的每个矩阵的实际效果是从右到左依次出现的。下面我们举一个例子来说明这一 情况。在这个例子中,我们要通过世界变换矩阵来创建一个“飞碟”。我们想要这个UFO沿中心(模型空间的y-轴)来旋转,同时要在场景中平移。为了达到这样的效果,你可以首先创建一个平移矩阵,然后用它和旋转矩阵相乘,如下所示:W=Tw·Ry  公式中,Tw表示平移矩阵,Ry表示旋转矩阵。  两个矩阵相乘的顺序是很重要的,与标量的相乘不同,矩阵相乘的顺序是不能交换的。如果我们将两个矩阵的顺序交换的话,得到的结果就会是,先对飞碟进行平移,然后将它绕世界原点进行旋转。  无论我们创建什么类型的矩阵,都要按照从右到左的顺序,这样才能达到我们预期的结果。

时间: 2024-08-14 08:28:01

Unity3D开发之Matrix4x4矩阵变换的相关文章

Unity3D开发之NGUI结合粒子系统的遮挡问题

原地址:http://blog.csdn.net/lihandsome/article/details/22194025 我的是NGUI3.0.3版本,在加入粒子系统的时候发现一直都是在精灵的下面,所以必须要解决这个问题. 问题的出现是因为NGUI和粒子系统的渲染队列问题,那我们自己就可以新建一个属于粒子系统的Shader,然后直接复制原来系统自带的那个Shader的代码,修改代码里面的 [csharp] view plaincopy "Queue"="Transparent

Unity3D开发之Mac OS 开发环境搭建 笔记

欢迎来到unity学习.unity培训.unity企业培训教育专区,这里有很多U3D资源.U3D培训视频.U3D教程.U3D常见问题.U3D项目源码,[狗刨学习网]unity极致学院,致力于打造业内unity3d培训.学习第一品牌. 首先上几张图: 摸索了一上午,才搞定在模拟器中运行.至于在Iphone真机中运行,虽然有开发者证书,目前还没在Xcode中配置好. 我今天第一次接触并使用MAC操作系统,组里把熟悉使用MAC打包Unity游戏任务交给给我,鸭梨山大 ,还有忙了一上午有点点小成果. N

Unity3D 开发之shader教程(浅谈GPU渲染之shader language概述)

尊重他人智慧成果,欢迎转载,请注明作者 心若透明 地址  http://www.cnblogs.com/ubanck/p/4110618.html 在上一篇博客里,大致讲解了一下3D渲染的原理,即从一个简单的模型到渲染到屏幕的过程!其中提到了重要的坐标变换方式,说的不够清楚!今天来谈谈shader语言的执行过程 从硬件上讲,GPU内部有顶点着色器与片段着色器,从渲染管线来看,顶点着色器控制这顶点的坐标转换过程,片段着色器控制像素的颜色计算过程.顶点着色器将顶点转换完成,输入到片段着色器进行处理(

Unity3D 开发之shader教程(浅谈GPU渲染入门)

这篇随笔,就不按照各种专业的解释来描述了,完全看自己发挥吧,写到哪儿算哪儿.若是哪里有说的不对的地方,请各位看官直说无妨! 说到游戏研发,就不可避免会提到图形学,图形学里面细去研究,就会牵涉到各种各样的数学知识,向量,矩阵之类的!而到这儿,咱们先开始从shader谈起,什么是shader?咱们通常说写个shader,其实也就是写了一个执行某种功能的程序,跟你写个普通的程序原理上说一样的,而不同之处在于,shader是写个GPU执行的,说到GPU执行,那么就得谈到3D游戏里面的那些人物啊,花鸟啊,

Unity3d 开发之 lua 在 IOS 上坑的总结

相同的 lua 代码在安卓上能正常运行,但在 IOS 上可能不会正常运行而导致报红,崩溃等,我在使用 lua 编程时遇到的一些坑总结如下: 1. File.ReadAllText, 诸如以下代码在 ios 上会崩: local path="C:/1.txt"; local file=luanet.import_type("System.IO.File"); local text=file.ReadAllText(path); 正确写法如下: local path=&

Unity3D开发之NGUI点击事件穿透响应处理

http://www.xuebuyuan.com/1936292.html 在使用NGUI 开发2D项目的时候,发现了一个问题,就是如果点出一个菜单,然后点击菜单上面的按钮的时候就会使得按钮下面的物品也会触发点击事件(如果有的话), 经过查阅相关资料,发现了一个很方便的处理方法:分层处理.就是把菜单层和游戏显示层分为不同的Layer:比如: 和 然后,在NGUI的UICamera的脚本那里,设定它的事件响应: 这样的话,他就会响应到相应的层了,当然还可以更灵活地去用代码控制设定使用,这里只是一个

[Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘(下)

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 喜欢我的博客请记住我的名字:秦元培,我的博客地址是blog.csdn.net/qinyuanpei. 转载请注明出处,本文作者:

Unity3D游戏开发之Lua与游戏的不解之缘终结篇:UniLua热更新完全解读

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 喜欢我的博客请记住我的名字:秦元培,我的博客地址是blog.csdn.net/qinyuanpei. 转载请注明出处,本文作者:

[Unity3D]Unity3D游戏开发之从Unity3D到Eclipse

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 喜欢我的博客请记住我的名字:秦元培,我的博客地址是blog.csdn.net/qinyuanpei. 转载请注明出处,本