精华内容
下载资源
问答
  • OpenGL - Matrix4X4 矩阵变换

    千次阅读 2016-09-26 20:35:31
    OpenGL 相关开发,对图像进行处理时,常用到Matrix4x4矩阵来变换场景中对象的位置、旋转和缩放。但是很多人都不太理解这儿Matrix4x4变换矩阵。通过DX中的变换矩阵我来讲一讲在unity中这个变换矩阵是怎么变换的。 ...
    OpenGL 相关开发,对图像进行处理时,常用到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表示旋转矩阵。  两个矩阵相乘的顺序是很重要的,与标量的相乘不同,矩阵相乘的顺序是不能交换的。如果我们将两个矩阵的顺序交换的话,得到的结果就会是,先对飞碟进行平移,然后将它绕世界原点进行旋转。  无论我们创建什么类型的矩阵,都要按照从右到左的顺序,这样才能达到我们预期的结果。

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

    在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表示旋转矩阵。  两个矩阵相乘的顺序是很重要的,与标量的相乘不同,矩阵相乘的顺序是不能交换的。如果我们将两个矩阵的顺序交换的话,得到的结果就会是,先对飞碟进行平移,然后将它绕世界原点进行旋转。  无论我们创建什么类型的矩阵,都要按照从右到左的顺序,这样才能达到我们预期的结果。

    转载于:https://www.cnblogs.com/hewei2012/p/4190282.html

    展开全文
  • Unity3D开发之Matrix4x4矩阵变换http://sygame.lofter.com/post/117105_3b843c/在Unity开发中时常会用到Matrix4x4矩阵来变换场景中对象的位置、旋转和缩放。但是很多人都不太理解这儿Matrix4x4变换矩阵。通过DX中的...

    Unity3D开发之Matrix4x4矩阵变换

    http://sygame.lofter.com/post/117105_3b843c/


    在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表示旋转矩阵。  两个矩阵相乘的顺序是很重要的,与标量的相乘不同,矩阵相乘的顺序是不能交换的。如果我们将两个矩阵的顺序交换的话,得到的结果就会是,先对飞碟进行平移,然后将它绕世界原点进行旋转。  无论我们创建什么类型的矩阵,都要按照从右到左的顺序,这样才能达到我们预期的结果。




    欢迎大家加入Unity技术交流群:3112035

                                                                                                                                                                                      ———— 大红花


    展开全文
  • unity中的利用Matrix4x4实现缩放

    千次阅读 2016-12-26 09:43:02
    1、缩放矩阵 2、示例代码using UnityEngine; using System.Collections;public class MyTransform : ... public Matrix4x4 matrix; //平移矩阵 public Vector4 v; //临时存储矩阵变换之后的点 public Vec

    1、缩放矩阵
    这里写图片描述

    2、示例代码

    using UnityEngine;
    using System.Collections;
    
    public class MyTransform : MonoBehaviour
    {
        public Matrix4x4 matrix;    //平移矩阵
        public Vector4 v;           //临时存储矩阵变换之后的点
        public Vector4 startPos;    //物体初始位置
        public Vector4 startScale;  //物体初始缩放
        public float x = 1;         //x轴平移/缩放
        public float y = 1;         //y轴平移/缩放
        public float z = 1;         //z轴平移/缩放
    
        /// <summary>
        /// 记录初始位置
        /// </summary>
        private void Start()
        {
            startPos = new Vector4(transform.position.x, transform.position.y, transform.position.z, 1);
            startScale = new Vector4(transform.localScale.x, transform.localScale.y, transform.localScale.z, 1);
        }
    
        /// <summary>
        /// Update中平移
        /// </summary>
        private void Update()
        {
            //MyTranslate();
            MyScale();
        }
    
        /// <summary>
        /// 平移函数
        /// </summary>
        private void MyTranslate()
        {
            matrix = Matrix4x4.identity; //单位矩阵
            matrix.m03 = x;
            matrix.m13 = 4;
            matrix.m23 = 5;
            v = matrix * startPos;
            transform.position = new Vector3(v.x, v.y, v.z);
        }
    
        /// <summary>
        /// 缩放函数
        /// </summary>
        private void MyScale()
        {
            matrix = Matrix4x4.identity;
            matrix.m00 = x;
            matrix.m11 = y;
            matrix.m22 = z;
            v = matrix * startScale;
            transform.localScale = new Vector3(v.x, v.y, v.z);
        }
    }
    

    3、将两个脚本放在一个空物体上
    这里写图片描述

    4、拖拽Inspector面板,则可以看到缩放结果:
    这里写图片描述

    展开全文
  • 【转】Unity3D开发之Matrix4x4矩阵变换

    千次阅读 2015-02-15 22:37:56
    在Unity开发中时常会用到Matrix4x4矩阵来变换场景中对象的位置、旋转和缩放。但是很多人都不太理解这儿Matrix4x4变换矩阵。通过DX中的变换矩阵我来讲一讲在unity中这个变换矩阵是怎么变换的。 在三维图形程序中,...
  • Unity中的Matrix4x4

    2016-05-11 22:44:00
    物体平移旋转一般变换底层都是用矩阵来表示的,一般不会用到这个类。有时候需要一些世界坐标与局部坐标转换的时候,可能就要... 2 Matrix4x4 mat = Matrix4x4.TRS(new Vector3(1,1,1),Quaternion.Euler(0,90,0),Vect...
  • 文章目录点在坐标系下的定位3x3扩展4x4添加偏移量齐次坐标缩放矩阵旋转矩阵在 Shader 中实现一些旋转旋转顶点运行效果旋转纹理 UV运行效果总结References LearnGL - 学习笔记目录 本人才疏学浅,如有什么错误,望不...
  • class wcPt3D { public: ...typedef GLfloat Matrix4x4[4][4]; // 打印矩阵 void printMatrix4x4(Matrix4x4 mat) { printf("["); for (int row = 0; row < 4; ++row) { for ...
  • 文章目录前言一、3D平面的矩阵由来?二、平移公式推导推导矩阵三、缩放推导矩阵四、旋转单位圆公式推导推导矩阵绕Z轴旋转绕X轴旋转绕Y轴旋转结论五、CSS3...对于三维我们使用的是一个4x4矩阵,类似这样: (a00a01a02a
  • Unity中矩阵的平移、旋转、缩放

    千次阅读 2017-03-14 02:23:59
    在学这几个基本概念的同时,我们会用到 Mesh(网格)、数学运算、4x4矩阵的一些简单的操作。但由于克森也是新手,文章的严谨性可能不是很高,还请大神们多多指教。   创建项目 首先创建一个Unity工程,...
  • Cesium创建平移、旋转、缩放矩阵

    千次阅读 2020-03-06 22:29:01
    创建平移矩阵 4x4 //创建平移矩阵方法一 const mat4 = Cesium.Matrix4.fromArray([ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, x, y, z, 1.0 ]); //创建平移矩阵方法二 const translation = ...
  • 3D引擎是将现实中的物质抽象为多边形或者各种曲线等表现形式,在计算机中进行相关计算并输出最终图像的算法实现的集合。 3D引擎就像是在计算机内...Matrix4x4 Scale(){缩放矩阵} Matrix4x4 Rotation(){旋转矩阵} ...
  • 今天我们来谈谈关于Unity中的旋转。主要有三种方式。变换矩阵,四元数和欧拉角。 定义 ...可以执行任意的3d变换(平移,旋转,缩放,切边)并且透视变换使用齐...Unity中提供了一个Matrix4x4矩阵类 四元数 ...
  • Unity Math Matrix

    2020-01-26 18:50:20
    Matrix4x4是标准变换矩阵,可以执行线性变换,平移,旋转,缩放,切边等,以及使用齐次坐标进行透视变换。 U3D编程中,一般很少直接使用矩阵,因为多数变换都被封装到了Vector3和Quaternion中了。 静态属性 ...
  • 今天我们来谈谈关于Unity中的旋转。...Unity中提供了一个Matrix4x4矩阵类 四元数 “四元数是最简单的超复数。 复数是由实数加上元素 i 组成,其中i^2 = -1。 相似地,四元数都是由实数加上三个元素...
  • C#用矩阵实现物体旋转

    千次阅读 2019-04-03 20:48:50
    ** C#中,三种变换矩阵分为三种:缩放,平移,...言归正传,C#中为我们的矩形运算做出了规则,所以我们只需要写出Matrix4x4这个规定的矩形之后点出之后的一系类,旋转,平移,缩放的应用,旋转可以使用Euler Quat...
  • Transform的主要作用是矩阵转换,在Container中矩阵变换...一个4X4矩阵,不难发现,其他平台的变换矩阵也都是思维的。一些复合操作,仅靠三维是不够的,必须采用额外的一维来补充。 origin Offset 一旋转...
  • as3_Matrix3d

    2010-09-10 15:45:23
    Matrix3D 类使用一个 4x4 正方形矩阵,即一个由四行和四列数字构成的表,其中容纳了用于转换的数据。矩阵的前三行容纳每个 3D 轴 (x,y,z) 的数据。平移信息位于最后一列中。方向和缩放数据位于前三个列中。缩放因子...

空空如也

空空如也

1 2
收藏数 36
精华内容 14
关键字:

matrix4x4矩阵缩放