DirectX9.0第一天
2015-07-21 00:18
344 查看
第一部分 基础知识
开始的时候复习一下向量
在D3DX库中有很多函数返回指向变换结果的指针。在大部分情况下,除非特别声明
叉积(叉乘):p = u*v = [(uyvz - uzvy),(uzvx-uxvz),(uxvy-vyux)]
矩阵:三个变化矩阵要特别注意
1.平移:
2.旋转
绕x旋转a弧度
绕y旋转a弧度
绕z旋转a弧度
3.缩放
平面:这里有一句不是很明白哈,如果平面的法向量的模为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,正无穷)
开始的时候复习一下向量
在D3DX库中有很多函数返回指向变换结果的指针。在大部分情况下,除非特别声明
叉积(叉乘):p = u*v = [(uyvz - uzvy),(uzvx-uxvz),(uxvy-vyux)]
矩阵:三个变化矩阵要特别注意
1.平移:
1 | 0 | 0 | 0 |
0 | 1 | 0 | 0 |
0 | 0 | 1 | 0 |
x | y | z | 1 |
绕x旋转a弧度
1 | 0 | 0 | 0 |
0 | cosa | sina | 0 |
0 | -sina | cosa | 0 |
0 | 0 | 0 | 1 |
cosa | 0 | -sina | 0 |
0 | 1 | 0 | 0 |
sina | 0 | cosa | 0 |
0 | 0 | 0 | 1 |
cosa | sina | 0 | 0 |
-sina | cosa | 0 | 0 |
0 | 0 | 1 | 0 |
0 | 0 | 0 | 1 |
x | 0 | 0 | 0 |
0 | y | 0 | 0 |
0 | 0 | z | 0 |
0 | 0 | 0 | 1 |
在代码中代表平面的时候用四个变量便可以了,期中三个变量构成了法向量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,正无穷)
相关文章推荐
- ssd 应用场景
- Android overlay系统
- LightOJ1038-Race to 1 Again
- Python文件操作
- 求质因数问题
- 整理好的git命令(没细分,见谅)
- Ubuntu安装后,无启动项,解决办法
- 如何使用Word2007发布csdn博文
- [Leetcode 61, Medium] Rotate List
- poj3268 最短路
- 理解微软100题
- 【树形dp】hdu 2412 Party at Hali-Bula
- Day03-JavaScript高级编程
- 黑马程序员————Java基础日常笔记---IO流二
- ——JAVASE-GUI图形用户界面
- eclipse集成tomcat日志文件输入配置
- TCP协议与UDP协议的区别
- LightOJ1265 - Island of Survival
- Day02-CSS+Javascript基础
- ZOJ Treasure Hunt IV