您的位置:首页 > 其它

DirectX9.0第一天

2015-07-21 00:18 344 查看
第一部分 基础知识

开始的时候复习一下向量

在D3DX库中有很多函数返回指向变换结果的指针。在大部分情况下,除非特别声明

叉积(叉乘):p = u*v = [(uyvz - uzvy),(uzvx-uxvz),(uxvy-vyux)]

矩阵:三个变化矩阵要特别注意

1.平移:

1000
0100
0010
xyz1
2.旋转
绕x旋转a弧度

1000
0cosasina0
0-sinacosa0
0001
绕y旋转a弧度

cosa0-sina0
0100
sina0cosa0
0001
绕z旋转a弧度

cosasina00
-sinacosa00
0010
0001
3.缩放

x000
0y00
00z0
0001
平面:这里有一句不是很明白哈,如果平面的法向量的模为1,则d=-np0给出了坐标原点到该平面最短的有符号距离。

在代码中代表平面的时候用四个变量便可以了,期中三个变量构成了法向量n,d = -n*p0

平面的变换可以将(n,d)看作4D向量并与所期望的变换矩阵的逆转置相乘来实施变换

这里推导一下哈:

以下是参考师兄的博客的,师兄的是对法向量的转变的

先要说明一个前置知识:

1矩阵的点乘是在两个矩阵具有同样大小的基础上。

2向量(注意是向量)的点乘等于后一个向量的置换与前一个向量相乘,即

A·B = AB’

设某切向量为T,某法向量为N。 自然有N·T = 0

另变换矩阵为M,设法向量的变化矩阵为G

有(NG)·(TM) = 0

有(NG)·(TM) = (NG)(TM)' = NGM'T' = 0      (1)

因为N·T = 0

有NT‘ = 0

到这里有一点小跳跃当GM’ = I 时 才能使 (1)式成立

于是乎G = (M')^-1

即逆转置

下面是我自己推导的平面的

平面的向量为(a,b,c,d)

其中d = -n·p0

n = (a,b,c)

设变换后d' = -n'点p0‘

设变换矩阵为M

由上得

有d' = -(n(M’)^-1)·(p0M)

有d‘ = -(n(M')^-1M'p0'

有d' = -(np0')

d' = -n·p0

d' = d

空间中的点到平面上最近的哪一点为q = p + (-kn)

k为点p到平面的最短有符号距离

k = n*p+d

射线:

射线的参数方程:p(t) = p0+tu

p0为射线的起点,u为射线的方向,t的定义域为[0,正无穷)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  DirectX9.0