3D数学基础之C#实现矩阵变换

Never put off what you can do today until tomorrow.

从刚开始学unity各种组件,C#基础,API,到现在的学习Cg语言,学习shaderLab
用了很长时间在细节上,有的时候一些看似非常基础的概念,大致了解下怎么用后,如果不知道其原理,那么,我认为是不可能真正的学会一种技术的。

本节就来实现矩阵与向量之间的计算,,我们将自己实现向量的类和矩阵的类,这也就代表着,我们必须实现基本的Mul功能

tools:visual studio 2015 建议安装插件:resharper.

step1
首先,关于C#语法,以及内置函数,这里不会解释的,大家可以搜索API或者MSDN
为了不在代码处做过多数学赘述,第一步将会介绍矩阵的几何变换(3种)

矩阵的平移变换Translation

将三维空间中的一个点移动到另一个点,随便Google了一张图 这里写图片描述

其中平移变换的结果为等号左侧,平移变换的计算在等号右侧,回想下矩阵乘法的运算规则
这里的运算为

X偏移量 = (X x 1 + Y x 0 + 1 x Tx) = X + Tx 也就是在X上的偏移量
同理: Y的偏移量 = (X x 0 + Y x 1 + 1 x Ty) = Y + Ty 也就是在Y上的偏移量
算到这里大家应该明白为什么三维向量和矩阵的运算,要用到Vector4了,因为w = 1方便我们跟矩阵做乘法。

矩阵的缩放变换
将模型放大或者缩小,本质也是对模型上每个顶点进行放大和缩小(顶点坐标值变大或变小)

缩放变换跟平移变换没差的 ,还是找个图把公式看下
这里写图片描述

矩阵的旋转变化
这个是本系列中会用到的,很重要,这里只说绕坐标轴旋转,来源Google图片

这里写图片描述

绕X轴旋转:顶点的X坐标不变,y坐标和z坐标绕X轴旋转θ度,旋转的正方向为顺时针方向,也就是逆时针是正方向,从图中可以看出,X的旋转结果 = X x 1 + Y x 0 + Z x 0 + 1 x 0 = X 这里可以解释绕X轴旋转X轴的顶点坐标不变
Y的旋转结果:X x 0 + Ycos(a) - Zsin(a) + 0 = Ycos(a) - Zsin(a) Z轴的旋转同理,最后,W = 1.
这是绕X轴旋转的公式

这里写图片描述
这里写图片描述

上面的分别是绕Y轴旋转和绕Z轴旋转的公式。

刚才讲了公式,并没有写公式的推导(懒/(ㄒoㄒ)/~~)

Ok,知道了矩阵的几何变换,下面进入实战

step2
接下来进入vs2015 新建c#窗体应用程序
我认为还是有必要提一下,本篇只是对3D数学中矩阵的计算加深理解,并不想重复造轮子

(1)首先要实现矩阵和向量的之间的计算,我们要先实现向量类,在资源管理器处右键新建类

 class Vector4
    {
        public double x, y, z, w;

        public Vector4()
        {

        }

        public Vector4(double x,double y,double z,double w)
        {
            this.x = x;
            this.y = y;
            this.z = z
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值