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

天行健 君子當自強而不息

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>
            亚洲精品国产精品国自产观看浪潮 | 在线一区欧美| 欧美成人精品一区二区| 久久久国产精品一区二区中文| 亚洲欧美精品伊人久久| 亚洲欧美在线x视频| 久久国产精品电影| 欧美凹凸一区二区三区视频| 亚洲国产欧美久久| 99精品国产热久久91蜜凸| 亚洲一区二区三区免费观看| 欧美一区二区三区在| 老司机免费视频一区二区三区| 欧美+日本+国产+在线a∨观看| 欧美日韩精品欧美日韩精品| 国产三区二区一区久久| 91久久久久久国产精品| 亚洲欧美日本日韩| 欧美不卡激情三级在线观看| 亚洲作爱视频| 久久视频免费观看| 一本色道久久综合亚洲精品小说| 欧美成人一区二区三区片免费| 羞羞漫画18久久大片| 久久综合九色综合欧美狠狠| 亚洲精品国久久99热| 亚洲欧美bt| 欧美精品一区二区三区很污很色的| 国产精品一区二区女厕厕| 91久久久在线| 久久久欧美一区二区| 亚洲美女福利视频网站| 久久精品国产免费观看| 国产精品国内视频| 亚洲乱码国产乱码精品精天堂| 久久精品国产2020观看福利| 日韩一级不卡| 欧美国产精品v| 韩国成人精品a∨在线观看| 亚洲天堂久久| 亚洲高清视频在线观看| 久久久久久高潮国产精品视| 国产精品日韩专区| 在线一区日本视频| 91久久国产自产拍夜夜嗨| 久久久久九九九九| 韩国视频理论视频久久| 午夜久久一区| 在线视频亚洲| 欧美天天综合网| 亚洲色图在线视频| 亚洲精品无人区| 欧美精品乱码久久久久久按摩 | 亚洲日韩视频| 欧美电影专区| 久久天天躁狠狠躁夜夜av| 国内精品国产成人| 久久精品在线| 欧美一区二区三区在线看| 国产午夜精品理论片a级大结局| 西瓜成人精品人成网站| 亚洲欧美在线磁力| 国产欧美一区二区色老头| 性亚洲最疯狂xxxx高清| 亚洲欧美三级在线| 国内精品视频666| 久久蜜桃资源一区二区老牛| 久久精品国产99国产精品| 樱桃视频在线观看一区| 免费成人性网站| 欧美成人dvd在线视频| 亚洲卡通欧美制服中文| 亚洲精品免费一区二区三区| 欧美日韩在线观看视频| 欧美亚洲免费高清在线观看| 欧美一级久久久| 亚洲国产精品小视频| 亚洲全部视频| 国产精品裸体一区二区三区| 久久精品国产亚洲高清剧情介绍| 欧美韩国在线| 六月婷婷一区| 欧美日韩1区2区3区| 欧美亚洲免费电影| 久久久久久久一区| 在线亚洲一区| 久久精品国产清高在天天线| 日韩视频在线观看免费| 亚洲欧美日本在线| 亚洲精品久久久久久久久| 亚洲一区二区三区三| 亚洲第一视频网站| 亚洲作爱视频| 136国产福利精品导航| 一本一本久久a久久精品牛牛影视| 国产亚洲一区二区在线观看| 91久久黄色| 国产一区二区三区免费在线观看 | 欧美不卡三区| 国产精品揄拍一区二区| 亚洲国产婷婷| 国产一区二区三区久久久久久久久| 亚洲第一在线| 国产日产亚洲精品| 亚洲美女在线看| 红桃av永久久久| 亚洲一区国产精品| 一本久久综合| 欧美暴力喷水在线| 久色婷婷小香蕉久久| 国产精品一区在线观看你懂的| 亚洲高清激情| 在线观看国产日韩| 性欧美大战久久久久久久免费观看| 日韩午夜av电影| 美女爽到呻吟久久久久| 久久久久久久97| 国产伦精品一区二区三区在线观看| 亚洲国产精品激情在线观看| 狠狠色伊人亚洲综合网站色| 亚洲欧美电影院| 亚洲中午字幕| 欧美亚洲成人精品| a4yy欧美一区二区三区| 99香蕉国产精品偷在线观看| 老**午夜毛片一区二区三区| 久久夜色精品国产亚洲aⅴ| 国产精品羞羞答答| 亚洲自拍16p| 欧美一区免费视频| 国产精品一区一区| 午夜伦欧美伦电影理论片| 欧美一区二区三区免费大片| 国产精品成人观看视频国产奇米| 91久久久久| 亚洲视频图片小说| 国产精品激情偷乱一区二区∴| 国产精品99久久久久久久久 | 欧美v日韩v国产v| 亚洲二区免费| 欧美激情一区二区三区全黄| 亚洲激情影院| 在线亚洲国产精品网站| 欧美日韩高清在线| 亚洲国产91| 欧美电影打屁股sp| 一本色道久久综合亚洲精品按摩| 久久精品首页| 久久亚洲视频| 亚洲国产精品成人va在线观看| 久久天堂国产精品| 欧美激情中文字幕乱码免费| 亚洲人成人99网站| 欧美日韩免费一区二区三区| 一区二区三区国产精品| 欧美一区二区三区日韩| 国内一区二区在线视频观看 | 在线视频欧美一区| 欧美一区二视频| 136国产福利精品导航| 欧美国产日本在线| 亚洲一区二区在| 欧美~级网站不卡| 99国产精品久久久久久久成人热 | 另类图片国产| 亚洲欧洲日本一区二区三区| 欧美日韩国产在线看| 欧美一区国产二区| 亚洲美女在线视频| 久久野战av| 亚洲午夜视频| 伊人久久久大香线蕉综合直播 | 美女精品自拍一二三四| 亚洲每日更新| 国产亚洲一区二区三区| 欧美精品激情在线观看| 亚洲欧美日韩电影| 最新国产精品拍自在线播放| 久久国产精品72免费观看| 亚洲免费av网站| 好吊视频一区二区三区四区| 欧美美女bb生活片| 久久久蜜桃精品| 亚洲影院高清在线| 最新亚洲一区| 欧美大色视频| 久久免费一区| 亚洲欧美视频在线观看| 亚洲人成网站色ww在线| 国产日韩精品久久久| 欧美日韩免费观看一区二区三区| 久久久久久伊人| 欧美专区在线观看| 亚洲综合99| 亚洲在线中文字幕| 亚洲视频日本| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 欧美国产一区在线| 久久婷婷久久一区二区三区| 性色av香蕉一区二区|