计算机图形学必备的数学知识

本文深入探讨3D空间中的向量和矩阵,包括向量的相等、长度、规范化、加减乘法及点积、叉积等概念,并详细介绍了矩阵的相等、乘法、单位矩阵、逆矩阵等。进一步讲解了基本变换如平移、旋转、比例变换,以及射线和平面的相关知识,是学习计算机图形学的基础。
摘要由CSDN通过智能技术生成

1、3D空间中的向量

向量的起点不重要

讨论vector时可独立于具体的坐标系,即与具体坐标系无关

计算机图形学中的坐标系和数学中的坐标系不太一样:左手坐标系右手坐标系

UE4中使用左手坐标系

当某一向量的起始端与坐标原点重合时,称该向量处于标准位置

对于处于标准位置的向量,我们可用向量的终点坐标来描该向量。用于描述向量的坐标称为分量(component)

注意区分点和向量

四个特殊的3D向量:

  • 1、零向量(zero vecotr)
  • 2、3D空间的标准基向量

长度为1的向量称为单位向量(unit vector)

3D图形学中会使用2D、3D和4D向量D3DX库提供了类D3DXVECTOR2D3DXVECTOR4分别用于表示2D和4D向量

维数不同的向量都具有相同的属性,即长度和方向,只是维数不同。此外,向量的数学运算除了cross product外都可以推广至任意维数的向量cross product只在3D空间中有定义


1.1、向量相等

可以直接使用类中的已重载的比较运算符来进行比较操作。该比较运算符已经处理好了浮点值比较所存在的问题

1.2、计算向量的长度

使用下面这个函数来计算向量的模

FLOAT D3DXVec3Length(CONST D3DXVECTOR3 *pV);

1.3、向量的规范化

向量的规范化(normalizing)就是使向量的模变为1

使用下面的函数对向量进行规范化

D3DXVECTOR3 *D3DXVec3Normalize(D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV);

在大部分情况下,除非特别声明,一个D3DX数学函数均返回一个指向结果的指针

1.4、向量加法

使用重载后的加法运算符

1.5、向量减法

使用重载后的减法运算符

1.6、数乘

使用重载后的数乘运算符

1.7、点积

点积(dot product)就是向量的对应分量相乘后相加,也可以表示为两个向量的模和夹角余弦值的乘积

正交(orthogonal)垂直(perpendicular)

1.8、叉积

两个向量叉积(cross product)的结果还是一个向量

叉积不具备交换性;交换后,结果反向。

对于向量的叉积运算,使用什么坐标系,就用哪一个手来判断结果向量的方向


2、矩阵

有时一个矩阵仅包含单行或单列。这样的矩阵称为行向量或列向量

2.1、矩阵相等、矩阵数乘和矩阵加法

如你所想

2.2、矩阵乘法

矩阵乘法是矩阵在3D图形学中最重要的运算。借助矩阵乘法,我们能够对向量实施变换,也可将几个变换进行组合

为了计算矩阵乘积AB,矩阵A的列数必须等于矩阵B的行数

矩阵乘法一般不具有交换性

2.3、单位矩阵

单位矩阵(Identity Matrix)的特点是除了主对角线上元素为1外,其余元素均为0,而且是方阵(square matrix)

单位矩阵对于标量可认为是矩阵中的1

2.4、逆矩阵

逆矩阵(inverse matrix)

  • 1、只有方阵才可能有逆矩阵
  • 2、并非所有的方阵都有逆矩阵
  • 3、一个矩阵与其逆矩阵的乘积为单位阵。当一个矩阵与其单位阵相乘时,可交换相乘次序

逆矩阵在求矩阵方程中的其他矩阵时非常有用

( A B ) − 1 = B − 1 A − 1 (AB)^{-1}=B^{-1}A^{-1} (AB)1=B1A1,该性质的前提时,矩阵A和B均可逆,且均为维数相同的方阵

2.5、矩阵的转置

矩阵的转置(transpose)可通过交换矩阵的行和列来实现

2.6、D3DX矩阵

编写Direct3D应用程序时,我们通常只使用4x4的矩阵1x4的行向量

  • 1、向量-矩阵乘法
  • 2、矩阵-矩阵乘法:矩阵乘法不具有交换性

对于矩阵,可使用括号运算符(parenthesis operator)来访问矩阵中的每一个元素,索引从零开始,使用圆括号

//基础矩阵
typedef struct D3DMATRIX{
   
	union {
   
		struct {
   
			float 11, 12, 13, 14;
			float 21, 22, 23, 24;
			float 31, 32, 33, 34;
			float 41, 42, 43, 44;
		};
		float m[4][4];
	};
} D3DMATRIX;

关于Union的用法已忘记

单位矩阵、取转置以及求逆都有相应的Direct3D函数来实现


3、基本变换

在3D图形学中,用向量-矩阵乘法来实现各种变换

使用Direct3D编程时,我们使用4x4的矩阵表示一个变换

我们之所以使用4x4矩阵是因为这种特定维数的矩阵有能力表征我们所需要的所有变换

3x3矩阵无法描述平移(translation)透视投影(perspective)以及反射(reflection,对称变换或镜像变换)

为了使向量-矩阵乘积有意义,我们必须将3D的点或向量扩展为4D行向量,因为1x3的行向量和一个4x4的矩阵是无法定义乘法运算的

为了保证点的平移变换能够正确进行,在将放入1x4的行向量时,我们将w分量设为1;为了防止对向量进行平移变换,在我们将向量放入1x4的行向量时,将w分量置为0

扩展后的4D向量称为齐次(homogenous)向量

如果经过变换后的向量的w分量不为0也不为1,则称该向量处于齐次空间(homogenous space)中,以区别于3D空间

将处于齐次空间中的向量映射回3D空间的方法是:用w分量去除该齐次向量的每一个分量

进行3D图形编程时,如果涉及到透视投影,则经常需要将向量由齐次空间映射到3D空间p20

3.1、平移矩阵

Translation matrix

要想对点 ( x , y , z , 1 ) \begin{pmatrix} x, & y, & z, & 1 \end{pmatrix} (x,y,z,1)分别沿坐标轴平移 p x 、 p y 、 p z p_x、p_y、p_z pxpypz个单位,则只需要将该向量与下面的平移矩阵相乘即可(p为平移向量):

T ( p ) = [ 1 0 0 0 0 1 0 0 0 0 1 0 p x p y p z 1 ] T(p)=\begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ p_x & p_y & p_z & 1 \\ \end{bmatrix} T(p)=100px010py

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值