3D游戏数学基础中的计算原理及几何意义(一、矩阵)

6 篇文章 0 订阅
5 篇文章 0 订阅

-前言-

在3D开发中,矩阵的运算是极为频繁的,几乎任何关于3D场景中的对象运算都会用到矩阵的知识。

-正文-

在我们日常游戏开发中使用到的矩阵多为方针(行数等于列数),通常为2x2、3x3、4x4的方阵。

下面列举一个一般的3x3方阵:\begin{bmatrix} m_{11}&m_{12} &m_{13} \\ m_{21} &m_{22} &m_{23} \\ m_{31}&m_{32} & m_{33} \end{bmatrix}

对角矩阵及单位矩阵

对角矩阵是矩阵中非对角线元素均为0则为对角矩阵,上面3x3方阵中当m12,m13,m23,m21,m31,m32为0是为对角矩阵。

单位矩阵则是一种特殊的对角矩阵,同样以上面3x3方阵为例,当满足对角矩阵的情况下,m11,m22,m33为1时则为3x3矩阵的单位矩阵。

矩阵的转置

矩阵转置是沿着对角线翻折之后的矩阵。比如一个行向量转置后为一个列向量。

                                                              行向量转置:\begin{bmatrix} x &y &z \end{bmatrix}^{\tau} =\begin{bmatrix} x\\ y\\ z\\ \end{bmatrix}

既然说到行向量与列向量,不同平台默认使用的向量方式不一样,DirectX中默认使用行向量,OpenGL中默认使用列向量。

1.对于任意矩阵M,转置后转置等于原矩阵

2.对于任意对角矩阵D,转置矩阵等于原矩阵(单位矩阵更是如此)

矩阵的乘法

矩阵中是没有除法的概念的,不过矩阵的乘法也是够打脑壳的。矩阵一般我们都是叫法都是行列,一个4x2的矩阵就是4行2列的矩阵,这个矩阵能与之相乘的矩阵必定满足行数为2,否则它们相乘没有意义。下面来看看一个4x2的矩阵乘以2x5的矩阵是如何相乘的(公式编辑器太麻烦了我就手写了):

矩阵乘法满足一下特性:

  • 任意矩阵M乘以方阵,不管从哪边乘,都将得到与原矩阵大小相同的矩阵
  • 矩阵乘法不满足交换律
  • 矩阵乘法满足结合律,即(AB)C = A(BC)
  • 矩阵乘积的转置等于先转置矩阵然后以相反顺序乘以矩阵,(AB)' = B'A'

矩阵的主要实际运用

在游戏开发中矩阵住还要用于对象的旋转、缩放、投影、镜像、仿射(平移)

除了仿射不是线性变换,其余变换都是线性变换。平移是不能使用3x3矩阵完成的,必须使用4x4齐次矩阵完成。

那我们首先来说说为什么3x3矩阵为什么不能平移,而必须使用4x4齐次矩阵才能完成3D对象的平移。

平移

一个3D对象的平移可以理解成在x,y,z分量上分别移动x‘,y’,z’的距离。根据上面所讲的矩阵乘法概念。

当一个3D坐标点Vector3(x,y,z)表示为矩阵为:\begin{bmatrix} x & y & z \end{bmatrix},能与之相乘的必然是一个三行的矩阵

在上面3x3矩阵中的方块中我们不管填什么值都无法满足右侧的结果,因此通过3x3矩阵是无法实现3D对象的平移的,因此4x4齐次矩阵能为我们解决这个问题。下面我通过手写构造了一个平移矩阵:

旋转

旋转轴可以是x轴,y轴,z轴,他们的基向量均不相同

当绕x轴旋转的基向量

R_{x}(\Theta ) = \begin{bmatrix} 1 & 0 &0 \\ 0& \cos\Theta & sin\Theta \\ 0& -sin\Theta & cos\Theta \end{bmatrix}

当绕y轴旋转的基向量

R_{y}(\Theta ) = \begin{bmatrix} cos\Theta & 0 &-sin\Theta \\ 0& \1 & 0 \\ sin\Theta& 0 & cos\Theta \end{bmatrix}

当绕z轴旋转的基向量

R_{z}(\Theta )=\begin{bmatrix} cos\Theta &sin\Theta &0 \\ -sin\Theta & cos\Theta &0 \\ 0 &0 &1 \end{bmatrix}

缩放

在3D中存在3个维度的缩放因子,分别为kx,ky,kz。在不同的方向应用不同的因子,被称为非均匀缩放。非均匀缩放时,物体角度将发生变换,视各方向缩放因子的不同,长度、面积、体积的变换因子也各不相同。

                                                            S(k_{x},k_{y},k_{z}) = \begin{bmatrix} k_{x} &0 &0 \\ 0& k_{y} &0 \\ 0& 0& k_{z} \end{bmatrix}

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
3D数学基础在图形与游戏开发起着至关重要的作用。它是构建3D图形和游戏数学原理和技术的基础,涵盖向量、矩阵几何变换、投影等多个方面。 在图形和游戏开发,我们需要使用向量来表示空间的位置、方向和大小。通过向量的加法、减法和乘法,我们可以进行各种计算,如对象之间的相对位置、碰撞检测等。 矩阵是另一个基本概念,用于表示和处理几何变换,如平移、旋转和缩放。通过矩阵的乘法,我们可以将一个对象从一个坐标系转换到另一个坐标系。 几何变换是实现物体在三维空间移动、旋转和缩放的核心技术。通过将对象的顶点坐标与变换矩阵相乘,我们可以实现各种几何变换。 投影是将3D物体映射到2D屏幕上的过程,包括透视和正交投影。通过投影矩阵,我们可以将3D坐标转化为2D坐标,并渲染到屏幕上。 在图形和游戏开发,我们还需要了解光照、纹理、碰撞检测等相关概念和技术。例如,通过了解光照模型和纹理贴图,我们可以实现更加逼真的图像效果。碰撞检测则是实现游戏物体之间的交互和碰撞反应的重要技术。 总之,3D数学基础在图形与游戏开发是不可或缺的。它提供了实现3D图形和游戏数学原理和技术,包括向量、矩阵几何变换和投影等方面的知识。通过掌握这些基础知识,开发者可以更好地理解和应用相关技术,实现出更加真实和精美的3D图形和游戏作品。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值