DirectX函数学习:几个数学函数问题

1:如何判断一条射线是否穿过一个多边形区域

刚才看到一个 Intersection test 算法"

假设射线为V,V.Origin表示射线源的坐标(x,y,z),V.Direction表示射线的方向(v1,v2,v3);

三角形为T,T的3个顶点分别为P1,P2,P3。

首先计算V.Origin到T的3个顶点的向量VP1,VP2,VP3,然后组成矩阵

VP1.X, VP2.X, VP3.X,

VP1.Y, VP2.Y, VP3.Y,

VP1.Z, VP2.Z, VP3.Z,

下来对上面的矩阵求转置,最后左乘V.Direction的到一个3维向量,

如果这个3维向量的每个值都在[0,1]范围内,则 Intersection test 返回 true

我有点搞不清楚,最后[0,1]的范围判定表示什么意思…

 

D3DXIntersectTri()这个函数已经可以了吧!

 

2:如何计算向量与矩阵的乘积?

DX8有三个(组)函数用来计算向量和矩阵的乘积:(以下都以三维向量为例)  

D3DXVec3Transform   计算一个三维向量的齐次坐标与一个4x4矩阵的乘积,返回一个4维向量  

D3DXVec3TransformCoord   计算一个三维向量的齐次坐标与一个4x4矩阵的乘积,然后把得到的4维向量的前三个分量分别除以第四个分量,得到一个变换后的三维坐标  

D3DXVec3TransformNormal   同样是计算三维向量与4x4矩阵的积,但是扩展成齐次坐标的时候,第四维不是1而是0,其他与前一个函数相同 

 

3:关于D3DXVec3Project 函数的说明:

得到的应该是你在 backbuffer 里的位置,如果你的 backbuffer 大小跟窗口不一致,那你还需要做相应的变换,

 

4:D3DXVec2CatmullRom 函数的含义?

进行Catmull-Rom插值计算。这里是2-D向量插值。

定义:

D3DXVECTOR2 *WINAPI D3DXVec2CatmullRom(          D3DXVECTOR2 *pOut,

    const D3DXVECTOR2 *pV0,

    const D3DXVECTOR2 *pV1,

    const D3DXVECTOR2 *pV2,

    const D3DXVECTOR2 *pV3,

    FLOAT s

);

参数:

pOut

[in, out] 指向 D3DXVECTOR2 结构的操作结果。

pV0

[in] 指向 D3DXVECTOR2 结构的位置向量。

pV1

[in] 指向 D3DXVECTOR2 结构的位置向量。

pV2

[in] 指向 D3DXVECTOR2 结构的位置向量。

pV3

[in]  指向 D3DXVECTOR2 结构的位置向量。

s

[in] 权重因数。看说明。

返回值:

指向 D3DXVECTOR2 结构的Catmull-Rom插值结果。

说明:

如果有四个点 (p1, p2, p3, p4),找出一个函数Q(s)满足下面的条件:

Q(s)是三次函数方程。

当s的范围从0到1时,Q(s)值在p2和p3之间。

当s为0时,Q(s)的直线平行连接p1 和 p3的直线

当s为1时,Q(s)直线平行于连接p2 和p4的直线。

Catmull-Rom样条也可以从Hermite样条取得:

v1 = p2

 v2 = p3

 t1 = (p3 - p1) / 2

 t2 = (p4 - p2) / 2

其中:v1 是 pV0。v2 是pV1。p3 是 pV2。p4 是 pV3。

用Hermite公式:

Q(s) = (2s3 - 3s2 + 1)v1 + (-2s3 + 3s2)v2 + (s3 - 2s2 + s)t1 + (s3 - s2)t2

用上面的变量代换,上面公式就变换为:

Q(s) = (2s3 - 3s2 + 1)p2 + (-2s3 + 3s2)p3 + (s3 - 2s2 + s)(p3 - p1) / 2 + (s3 - s2)(p4 - p2)/2

再整理为:

Q(s) = [(-s3 + 2s2 - s)p1 + (3s3 - 5s2 + 2)p2 + (-3s3 + 4s2 + s)p3 + (s3 - s2)p4] / 2

 

5:D3DXQuaternionToAxisAngle 函数的含义?

用一个向量和绕着这个向量旋转角度来计算一个四元数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值