青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

天行健 君子當自強而不息

D3D編程必備的數學知識(5)

平面

D3DX平面

在代碼中描述一個平面:僅僅需要一個法向量n和常數d就可以了。因此我們就使用一個4D向量(我們記錄成(n, d))來實現它。D3DX庫中用如下的結構來定義一個平面:

typedef struct D3DXPLANE
{
#ifdef __cplusplus
public:
D3DXPLANE() {}
D3DXPLANE( CONST FLOAT* );
D3DXPLANE( CONST D3DXFLOAT16* );
D3DXPLANE( FLOAT a, FLOAT b, FLOAT c, FLOAT d );

// casting
operator FLOAT* ();
operator CONST FLOAT* () const;

// unary operators
D3DXPLANE operator + () const;
D3DXPLANE operator - () const;

// binary operators
BOOL operator == ( CONST D3DXPLANE& ) const;
BOOL operator != ( CONST D3DXPLANE& ) const;
#endif //__cplusplus
FLOAT a, b, c, d;
} D3DXPLANE, *LPD3DXPLANE;

對照等式(8)可知:這里a, b和c是平面法向量n的成員,d就是那個常數。

 

點和平面的空間關系

我們判定點和平面的關系主要是利用等式(8)來實現。例如,假設平面(n, d),我們能判定點p和平面的關系

       假如n·p + d = 0,那么點p與平面共面。

       假如n·p + d >0,那么點p在平面的前面且在平面的正半空間里。

       假如n·p + d <0,那么點p在平面的背面且在平面的負半空間里。

 

下邊的D3DX函數就是利用n·p + d 來判定點和平面的關系的函數:

FLOAT D3DXPlaneDotCoord(

       CONST D3DXPLANE *pP, // 平面

       CONST D3DXVECTOR3 *pV // 點

);

// 測試點相對于平面的位置

D3DXPLANE p(0.0f, 1.0f, 0.0f, 0.0f);

D3DXVECTOR3 v(3.0f, 5.0f, 2.0f);

float x = D3DXPlaneDotCoord( &p, &v );

 

if( x approximately equals 0.0f ) // v在平面.上

if( x > 0 ) // v在正半空間

if( x < 0 ) // v在負半空間

 

創建平面

我們能通過兩種方法創建平面。

第一種方法,直接用指定法線和點創建平面。假設法線n和在平面上的已知點p0,我們就能求出d:

n·p0+ d = 0

n·p0 = -d

-n·p0 = d

 

D3DX庫提供如下函數來完成創建平面的任務:

D3DXPLANE *D3DXPlaneFromPointNormal(

       D3DXPLANE* pOut, // Result.

       CONST D3DXVECTOR3* pPoint, // Point on the plane.

       CONST D3DXVECTOR3* pNormal // The normal of the plane.

);

 

第二種方法我們能通過在平面上的3個點創立一個平面

假如有點p0, p1, p2,那么我們就能得到平面上的兩個向量:

u = p1 - p0

v = p2 - p0

 

因此我們能通過把平面上的兩個向量進行叉乘得到平面的法線。回憶左手坐標系。

n = u × v

Then, -(n · p0) = d.

D3DX庫提供如下函數來完成通過同一平面上的3個點確定一個平面:

D3DXPLANE *D3DXPlaneFromPoints(

       D3DXPLANE* pOut, // Result.

       CONST D3DXVECTOR3* pV1, // Point 1 on the plane.

       CONST D3DXVECTOR3* pV2, // Point 2 on the plane.

       CONST D3DXVECTOR3* pV3 // Point 3 on the plane.

);

 

變換平面

我們能夠通過如下處理來變換一個面(n, d),就象一個4D向量通過乘以它所期望的變換矩陣的逆矩陣一樣來達到變換目的。注意平面的法向量必須首先被標準化。

我們能用下面的D3DX函數來完成操作:

D3DXPLANE *D3DXPlaneTransform(

       D3DXPLANE *pOut, // Result

       CONST D3DXPLANE *pP, // Input plane.

       CONST D3DXMATRIX *pM // Transformation matrix.

);

示例代碼:

D3DXMATRIX T(...); // Init. T to a desired transformation.

D3DXMATRIX inverseOfT;

D3DXMATRIX inverseTransposeOfT;

D3DXMatrixInverse( &inverseOfT, 0, &T );

D3DXMatrixTranspose( &inverseTransposeOfT, &inverseOfT );

D3DXPLANE p(...); // Init. Plane.

D3DXPlaneNormalize( &p, &p ); // make sure normal is normalized.

D3DXPlaneTransform( &p, &p, &inverseTransposeOfT );

 

 

射線(可選的)

設想在游戲中的一個玩家,正用他的槍射擊敵人。我們怎么判斷子彈是否從一個位置擊中另一個位置的目標?一個方法是用一條射線模擬子彈,用一個球體模型模擬敵人。(球體模型只是一個球體,它緊緊的圍繞一個物體,從而粗略地表示它的大小。球體模型將在第11章中做更詳細的介紹。)那么通過計算我們就能夠判定是否射中球體。在這部分我們學習射線的數學模型。

射線

一條射線能用一個起點和方向來描述。射線的參數方程是:

線/面相交

假設一條射線p(t) = p0 + tu 和 一個平面n·p + d = 0,我們想知道射線是否與平面相交,以及相交的交點信息(如果相交的話)。照這樣做,我們把射線代入平面方程并且求滿足平面方程的參數t,解答出來的參數就是相交的點。

把等式(9)代入平面方程:


posted on 2008-03-12 14:03 lovedday 閱讀(1474) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


公告

導航

統計

常用鏈接

隨筆分類(178)

3D游戲編程相關鏈接

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲国产精品成人va在线观看| 欧美日韩国产美| 亚洲欧洲免费视频| 免费在线亚洲欧美| 久久综合激情| 亚洲人www| 亚洲一区久久| 欧美在线视频一区二区| 久久只精品国产| 欧美精品偷拍| 国产精品日韩在线一区| 国语对白精品一区二区| 亚洲人精品午夜| 小辣椒精品导航| 欧美成人精品在线观看| 亚洲乱码国产乱码精品精| 一本色道久久99精品综合| 午夜精品久久久久久久久久久久久| 久久国产主播精品| 欧美日本一区| 好吊色欧美一区二区三区四区| 亚洲精品综合精品自拍| 欧美一区二区三区久久精品| 欧美/亚洲一区| 中文日韩在线视频| 欧美不卡一卡二卡免费版| 国产精品一区二区久久久久| 亚洲国产精品久久久久婷婷884 | 欧美在线免费观看| 美脚丝袜一区二区三区在线观看 | 免费在线亚洲欧美| 亚洲丝袜av一区| 免费观看一级特黄欧美大片| 国产日韩精品视频一区二区三区| 亚洲精品国产品国语在线app | 久久午夜精品一区二区| 午夜日韩激情| 亚洲国产高清一区| 午夜国产精品影院在线观看| 农村妇女精品| 在线观看一区| 久久精品人人做人人爽电影蜜月| 99精品国产在热久久婷婷| 美女网站在线免费欧美精品| 国产一区 二区 三区一级| 亚洲免费网址| 一区二区高清视频在线观看| 女生裸体视频一区二区三区 | 99国内精品| 亚洲大片免费看| 久久尤物视频| 精品动漫一区二区| 欧美一区91| 亚洲尤物在线视频观看| 国产精品黄色| 亚洲在线视频观看| 一区二区三区精品视频| 欧美三级韩国三级日本三斤| 一本色道久久综合亚洲精品不 | 亚洲欧洲日本专区| 欧美成人精品一区二区三区| 亚洲东热激情| 亚洲精品1234| 欧美巨乳在线| 中国成人亚色综合网站| 亚洲美女福利视频网站| 欧美日韩精品综合在线| 国产精品99久久久久久宅男| 亚洲精品国产拍免费91在线| 欧美日韩精品福利| 亚洲综合色婷婷| 亚洲桃色在线一区| 海角社区69精品视频| 欧美成人网在线| 欧美不卡在线视频| 亚洲香蕉在线观看| 欧美伊人久久| 亚洲激情第一区| 夜夜夜久久久| 国产综合色在线| 亚洲韩国精品一区| 国产精品久久久久一区二区三区共| 欧美专区在线观看| 欧美成人精品| 欧美一级片在线播放| 久久成人av少妇免费| 亚洲日本理论电影| 亚洲已满18点击进入久久| 有码中文亚洲精品| 99re热这里只有精品视频| 国产精品最新自拍| 免费成人高清| 国产精品高潮呻吟视频| 麻豆精品视频在线观看| 欧美日韩午夜剧场| 裸体素人女欧美日韩| 国产在线精品一区二区中文| 女人天堂亚洲aⅴ在线观看| 欧美精品九九| 久久综合九色综合欧美狠狠| 欧美日韩视频在线第一区| 久久高清福利视频| 欧美激情国产日韩| 久久久久女教师免费一区| 欧美日韩精品免费看| 牛人盗摄一区二区三区视频| 国产精品美女诱惑| 亚洲精品国久久99热| 国内精品**久久毛片app| 亚洲毛片一区二区| 亚洲精品美女在线| 欧美有码视频| 亚洲女同同性videoxma| 欧美顶级少妇做爰| 久久综合色播五月| 国产欧美日韩不卡免费| 日韩一区二区久久| 日韩香蕉视频| 美日韩精品免费| 免费成人av在线看| 国产一区视频在线观看免费| 一本一本久久a久久精品综合妖精| 在线日韩成人| 久久国产99| 欧美一区二视频| 国产精品久久7| 一区二区三区四区五区在线| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 中文一区在线| 亚洲作爱视频| 免费不卡中文字幕视频| 久久精品国产99国产精品| 国产精品xxxav免费视频| 亚洲精品小视频| 一本色道久久88综合日韩精品| 欧美阿v一级看视频| 欧美99久久| 91久久精品网| 欧美激情偷拍| 99re8这里有精品热视频免费 | 99re6热只有精品免费观看 | 欧美大片在线观看一区| 一区二区三区在线观看欧美| 久久精视频免费在线久久完整在线看| 午夜精品一区二区三区在线视| 国产精品成人一区二区三区吃奶| 99在线|亚洲一区二区| 这里只有精品视频| 国产精品99免费看 | 久久九九免费视频| 禁断一区二区三区在线| 亚洲网站在线播放| 国产精品久久久久婷婷| 亚洲毛片在线观看| 亚洲一区网站| 久久午夜电影| 国产伦精品一区二区三区视频孕妇| 一区二区久久久久久| 欧美日韩亚洲三区| 在线一区二区三区做爰视频网站| 亚洲欧美高清| 亚洲黄色av| 午夜精品久久久| 欧美.www| 亚洲欧美综合v| 国产精品福利在线观看网址| 国内精品久久久久影院优| 亚洲第一综合天堂另类专| 一级日韩一区在线观看| 久久精品导航| 亚洲视频精选| 欧美无乱码久久久免费午夜一区| 国产专区精品视频| 午夜精品久久久久影视 | 亚洲免费中文| 久久午夜视频| 午夜伦理片一区| 欧美日韩免费在线视频| 今天的高清视频免费播放成人 | 欧美精品日韩一本| 最新亚洲电影| 欧美国内亚洲| 亚洲国产精品一区二区www在线 | 欧美日韩午夜精品| 欧美一区日韩一区| 日韩一区二区高清| 国产精品一区二区三区成人| 久久精品中文| 亚洲一区二区三区精品在线观看| 欧美成人在线免费观看| 欧美一级欧美一级在线播放| 夜夜躁日日躁狠狠久久88av| 一区二区亚洲精品国产| 国产精品美女久久久久av超清| 蜜臀99久久精品久久久久久软件 | 亚洲日韩欧美视频一区| 国产一区二区看久久| 国产精品理论片在线观看| 欧美激情精品久久久久久免费印度| 午夜精品国产精品大乳美女|