博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DirectX学习笔记一 #数学基础
阅读量:5214 次
发布时间:2019-06-14

本文共 1737 字,大约阅读时间需要 5 分钟。

1.基本概念

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

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

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

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

D3DXVECTOR3类定义如下:

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

3.向量的计算

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

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

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

3.矩阵

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

矩阵的叉积:

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

DirectX中矩阵的表示:

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

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

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

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

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

5.变换矩阵

#平移变换

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

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

#旋转变换

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

#缩放变换

6.补充知识

平面

D3DXPLANE结构体略。。。

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

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

其中,函数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().

#平面法向量的规范化

#变换一个平面

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

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

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

射线

转载于:https://www.cnblogs.com/Wilson-Kwok/archive/2012/12/07/2806792.html

你可能感兴趣的文章
OO第四单元总结暨学期总结
查看>>
mysql5.7慢查询开启配置
查看>>
关于Android Force Close 出现的原因 以及解决方法
查看>>
收藏几个好的博文
查看>>
Spring中AOP的两种代理方式(Java动态代理和CGLIB代理-转载
查看>>
Ubuntu17.04下安装vmware虚拟机
查看>>
ProjectEuler 9
查看>>
中文编程
查看>>
软件开发方法
查看>>
Dllregisterserver调用失败解决方法
查看>>
Java文件操作大全
查看>>
数据结构&算法实践—【排序|插入排序】插入排序
查看>>
图的应用详解-数据结构
查看>>
WPF中播放视频音频
查看>>
linux下配置固定ip
查看>>
MsSql 游标 修改字段两个表关联 表向另个表插入记录
查看>>
Atlas命名空间Sys.Data下控件介绍——DataColumn,DataRow和DataTable
查看>>
一个简单驱动的makefile
查看>>
《宁夏文学六十年》读后
查看>>
几款实力很强的小工具,提高Windows使用效率
查看>>