unity shader数学基础3——矩阵的变换

矩阵变换的种类

旋转   缩放   平移   镜像   切换   投影(平行投影)  投影(透视投影)  可逆   等角   正交   刚体  

 

2D旋转矩阵

        public void Rotate(int degrees)
        {
            float angle = (float)(degrees / 360.0f * Math.PI);
            float newX = (float)(a.X * Math.Cos(angle) - a.Y * Math.Sin(angle));
            float newY = (float)(a.X * Math.Sin(angle) + a.Y * Math.Cos(angle));
            a.X = newX;
            a.Y = newY;

            newX = (float)(b.X * Math.Cos(angle) - b.Y * Math.Sin(angle));
            newY = (float)(b.X * Math.Sin(angle) + b.Y * Math.Cos(angle));
            b.X = newX;
            b.Y = newY;

            newX = (float)(c.X * Math.Cos(angle) - c.Y * Math.Sin(angle));
            newY = (float)(c.X * Math.Sin(angle) + c.Y * Math.Cos(angle));
            c.X = newX;
            c.Y = newY;
        }

2D缩放矩阵

 

2D平移

 

3D旋转矩阵

下图展示的是延不同轴旋转的一个计算方法

3D缩放矩阵

3D平移

下图展示的是3D旋转和平移相结合的矩阵如何计算

 

利用旋转矩阵我们可以把任意位置向量沿一个单位旋转轴进行旋转。也可以将多个矩阵复合,比如先沿着x轴旋转再沿着y轴旋转。但是这会很快导致一个问题——万向节死锁(Gimbal Lock,可以看看这个视频(优酷)来了解)。在这里我们不会讨论它的细节,但是对于3D空间中的旋转,一个更好的模型是沿着任意的一个轴,比如单位向量$(0.662, 0.2, 0.7222)$旋转,而不是对一系列旋转矩阵进行复合。这样的一个(超级麻烦的)矩阵是存在的,见下面这个公式,其中(Rx,Ry,Rz)(Rx,Ry,Rz)代表任意旋转轴:

 

3D透视投影

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dawn·张

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值