DirectX9.0常用平面函數

DirectX9.0常用平面函數

一.平面基本概念:
n*p + d = 0;
D3DXPLANE包含了a,b,c,d三個變量
a,b,c構成平面的法向量n,d=-n*p;


1.平面的方程式:
ax+by+cz=d;

先說一下高中的向量知識:
問:在一個平面上已經知道平面的法向量n(a,b,c),和平面上的任意點P(x,y,z),以及一個已經點R(x0,y0,z0)求平面方程?
解法:
RP = (x-x0, y-y0, z-z0);
RP*n = 0;(垂直定理)
a(x-x0)+b(y-y0)+c(z-z0)=0;
化簡:ax+by+cz+d=0;
由以上得只要知道向量和平面上任意直線就可以得到平面的方程,所以得到n*p+d=0;

 

//給定一個平面和一個點就可以計算n*p+d=0中的d可以用來判斷點所在的大概位置
D3DXPlaneDotCoor
FLOAT D3DXPlaneDotCoord(
  CONST D3DXPLANE * pP,
  CONST D3DXVECTOR3 * pV
);

 

//給定法線n和不在法線n上的點確定一平面
D3DXPlaneFromPointNormal
D3DXPLANE * D3DXPlaneFromPointNormal(
  D3DXPLANE * pOut,
  CONST D3DXVECTOR3 * pPoint,
  CONST D3DXVECTOR3 * pNormal
);

 

//由平面上已知3點求平面
D3DXPlaneFromPoints
D3DXPLANE * D3DXPlaneFromPoints(
  D3DXPLANE *pOut,
  CONST D3DXVECTOR3 *pV1,
  CONST D3DXVECTOR3 *pV2,
  CONST D3DXVECTOR3 *pV3
);

 

//平面的規範化
D3DXPlaneNormalize
D3DXPLANE * D3DXPlaneNormalize(
  D3DXPLANE * pOut,
  CONST D3DXPLANE * pP
);

 

//平面的變換
D3DXPlaneTransform
D3DXPLANE * D3DXPlaneTransform(
  D3DXPLANE *pOut,
  CONST D3DXPLANE *pP,
  CONST D3DXMATRIX *pM
);

 

相關代碼見

 http://download.csdn.net/source/1791815

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章