DirectX学习笔记一 #数学基础

泄露秘密 提交于 2020-03-03 05:30:44

1.基本概念

向量:有向线段,长度和方向是2个重要属性。DirectX中,Vector可以表示点坐标、方向等信息。

坐标系:DirectX中使用的是左手坐标系。

00_thumb6

单位向量(unit vector):模为1的向量称为单位向量。

2.DirectX中与向量有关的类——D3DXVECTOR3(一般是3D的,还有2D和4D的向量)

D3DXVECTOR3类定义如下:

00_thumb17

00_thumb24

00_thumb31

可以看到,D3DXVECTOR3类实际上定义了一个结构体,这个结构体有float型的3个数据成员,分别表示3维向量的3个分量,此外,还有一些个运算符重载是用于向量的计算的。

3.向量的计算

略过求模,规范化(求单位向量),向量加减,数乘。。。只讲点积、叉积

00_thumb42

记住,点积是两个向量的对应分量相乘(component-wise multiply)再相加。

如上所述,当u、v都是单位向量时,它们的点积就等于向量夹角的余弦值。(这可以用来计算light和plane的夹角,从而根据不同的角度计算光照量)

00_thumb50

00_thumb58

00_thumb65

00_thumb71

3.矩阵

忽略矩阵加减、数乘,只讲逆矩阵和转置矩阵。逆矩阵主要是用于逆变换,即还原为变换前的状态;而引出转置矩阵主要就是为了计算逆矩阵,因为计算逆矩阵需要用到转置矩阵。另外,记住一点,对于规范化的矩阵,它的逆矩阵和转置矩阵相等。这就提供了一个快速计算逆矩阵的方法,因为转置矩阵不就是转了一下而已,根本不用计算。

矩阵的叉积:

00_thumb104

为帮助记忆,可写成行列式的形式,即:

00_thumb118

DirectX中矩阵的表示:

00_thumb81

00_thumb90

00_thumb98

可见,DirectX中的矩阵都是4x4的。

通过括号运算符可访问到矩阵的任一元素,如M(2, 3)=1.0f;

单位矩阵是除了对角线上全为1其它元素均为0的方阵。

00_thumb127

00_thumb135

4.因为我们的变换矩阵都是4x4的,但是我们的向量是3D的,那么就涉及到一个向量从3D扩展到4D的问题。我们通过给一个3D向量增加一个分量u,并且规定当u=0时,表示这个向量是不可平移的;

当u=1时,表示这个向量是可以平移的(这个向量存放的可能是一个点的坐标,点是可以平移的)。

5.变换矩阵

#平移变换

image_thumb3

通过指定沿x、y、z轴的偏移量,我们可以用这个函数”构造“出一个平移变换矩阵。

例如,要变换一个点P(x, y, z, 1),经过P=P*T的平移变换后,新的P=(x+px, y+py, z+pz, 1)

#旋转变换

image_thumb6

image_thumb10

image_thumb13

绕y轴、z轴旋转的函数于此类似。

#缩放变换

image_thumb4

6.补充知识

平面

image_thumb[9]

image_thumb[12]

D3DXPLANE结构体略。。。

其中,n为平面的法向量,而d为常数=>由 n`(p-po)=0,得n`p-n`po=0,那么d=-n`po.其中po是平面内的确定的某一点。

点面关系的确定:在平面上,在平面的前方or在平面的后方。

image_thumb[15]

image_thumb[20]

其中,函数D3DXPlaneDotCoord()的功能(Remark:Given a plane (a, b, c, d) and a 3D vector (x, y, z) the return value of this function is a*x + b*y + c*z + d*1. The D3DXPlaneDotCoord function is useful for determining the plane's relationship with a coordinate in 3D space. )就是计算n.p+d的值,从而根据这个值的正负或零确定点面的关系。记住D3DXPlane结构的四个分量中,前三个分量a,b,c是平面的法向量n,第四个分量d是常量-n.po.

#平面的其它创建方法:指定法向量和一个点,用D3DXPlaneFromPointNormal(); 指定三个点,用D3DXPlaneFromPoints().

#平面法向量的规范化

image_thumb[23]

#变换一个平面

image_thumb[27]

注意,原来的平面的法向量一定先要规范化。一个平面可以通过与一个变换矩阵的逆转置矩阵相乘实施变换。

#找出平面上到某一给定点的最近点

image_thumb[31]

image_thumb[33]

即将已知点p平移-kn,就得到了平面上离p最近的点q

射线

image_thumb[37]

image_thumb[39]

image_thumb[44]

image_thumb[47]

image_thumb[52]

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!