DirectX学习笔记--3D基本数学知识整理

最近在看《Direct9.0 3D游戏编程基础》以及浅墨大神的《windows游戏编程从零开始》两本书,希望能通过博客来记录一下自己的学习历程,整理相关的知识,方便查阅。


一.数学知识整理

1.对于2D,我们只需要一个二维坐标系,但是3D,就需要3D的坐标系。描述3D的坐标系分为左手坐标系和右手坐标系,二者的差别体现在z轴的方向上,左手坐标系z轴正方向穿进纸面,右手反之。对于屏幕,自然是穿进屏幕了,所以我们常用的就是左手坐标系。

2.向量的两种乘法运算:

(1)点乘:u(ux, uy, uz),v(vx, vy, vz),则u点乘v = ux*vx +uy*vy + uz*vz;

(2)叉乘:u(ux, uy, uz),v(vx, vy, vz),则u叉乘v = p, p(uy*vz - uz*vy, uz*vx - ux*vz, ux*vy - uy*vz)

3.矩阵:m*n矩阵表示m行n列的矩形数组。

4.矩阵乘法:

(1)条件: A*B矩阵,要保证A的列数 = B的行数。若A为m*n矩阵,B为n*p矩阵,则结果C矩阵为m*p矩阵。


二.Direct-X对于数学函数的处理

1.D3DX数学函数一般返回一个指向结果的指针。

2.编写D3D程序时,我们通常只需要使用4*4的矩阵和1*4的行向量。为什么不用3*3呢?因为3*3虽然看起来就满足三维的要求,但是,有许多变换是做不到的。那为什么要用1*4的行向量呢?因为要保证进行矩阵的乘法运算,4*4的矩阵必须和1*4的矩阵进行乘法运算,而不能与1*3的矩阵进行乘法运算。剩余的一个维度,对于坐标和向量有所不同,对于坐标,由于需要进行平移变换,所以将剩余的维度置为1,而对于向量,由于平移没有意义,所以剩余的维度置为0.

3.对于矩阵变换,要按照比例变换,旋转变换以及平移变换的顺序依次进行变换。变换通过乘以一个变换矩阵来达到效果。可以根据矩阵乘法,将若干变换整合起来,节约开销。


你可能感兴趣的:(Direct-X)