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

天行健 君子當自強而不息

頂點坐標變換(2)

矩陣類型及其操作

在Direct3D中,頂點坐標變換通常是借助于矩陣實現的,因此下面首先介紹在Direct3D中提供的各種矩陣類型和相關的矩陣運算函數。

 

1、D3DMATRIX矩陣類型

D3DMATRIX是Direct3D中最簡單的矩陣類型,其定義如下:

typedef struct _D3DMATRIX {
union {
struct {
float _11, _12, _13, _14;
float _21, _22, _23, _24;
float _31, _32, _33, _34;
float _41, _42, _43, _44;
        };
float m[4][4];
};
} D3DMATRIX;

顯然,D3DMATIX中存放的是一個4x4的二維浮點數組,可以通過_ij的格式訪問該數組中的每個元素,i表示該元素的行數,j表示該元素的列數。例如,_34表示第三行、第四列的元素。

 

2、D3DXMATRIX矩陣類型

該類型矩陣定義如下:

#ifdef __cplusplus
typedef struct D3DXMATRIX : public D3DMATRIX
{
public:
D3DXMATRIX() {};
D3DXMATRIX( CONST FLOAT * );
D3DXMATRIX( CONST D3DMATRIX& );
D3DXMATRIX( CONST D3DXFLOAT16 * );
D3DXMATRIX( FLOAT _11, FLOAT _12, FLOAT _13, FLOAT _14,
FLOAT _21, FLOAT _22, FLOAT _23, FLOAT _24,
FLOAT _31, FLOAT _32, FLOAT _33, FLOAT _34,
FLOAT _41, FLOAT _42, FLOAT _43, FLOAT _44 );
    // access grants
FLOAT& operator () ( UINT Row, UINT Col );
FLOAT operator () ( UINT Row, UINT Col ) const;
    // casting operators
operator FLOAT* ();
operator CONST FLOAT* () const;
    // assignment operators
D3DXMATRIX& operator *= ( CONST D3DXMATRIX& );
D3DXMATRIX& operator += ( CONST D3DXMATRIX& );
D3DXMATRIX& operator -= ( CONST D3DXMATRIX& );
D3DXMATRIX& operator *= ( FLOAT );
D3DXMATRIX& operator /= ( FLOAT );
    // unary operators
D3DXMATRIX operator + () const;
D3DXMATRIX operator - () const;
    // binary operators
D3DXMATRIX operator * ( CONST D3DXMATRIX& ) const;
D3DXMATRIX operator + ( CONST D3DXMATRIX& ) const;
D3DXMATRIX operator - ( CONST D3DXMATRIX& ) const;
D3DXMATRIX operator * ( FLOAT ) const;
D3DXMATRIX operator / ( FLOAT ) const;
    friend D3DXMATRIX operator * ( FLOAT, CONST D3DXMATRIX& );
    BOOL operator == ( CONST D3DXMATRIX& ) const;
BOOL operator != ( CONST D3DXMATRIX& ) const;
} D3DXMATRIX, *LPD3DXMATRIX;
#else //!__cplusplus
typedef struct _D3DMATRIX D3DXMATRIX, *LPD3DXMATRIX;
#endif //!__cplusplus

 

3、D3DXMATRIXA16矩陣類型

D3DXMATRIXA16稱為16字節對齊矩陣(16-byte aligned matrix),它是從矩陣D3DXMATRIX中繼承而來的,其定義如下:

typedef D3DX_ALIGN16 _D3DXMATRIXA16 D3DXMATRIXA16, *LPD3DXMATRIXA16;

//---------------------------------------------------------------------------
// Aligned Matrices
//
// This class helps keep matrices 16-byte aligned as preferred by P4 cpus.
// It aligns matrices on the stack and on the heap or in global scope.
// It does this using __declspec(align(16)) which works on VC7 and on VC 6
// with the processor pack. Unfortunately there is no way to detect the
// latter so this is turned on only on VC7. On other compilers this is the
// the same as D3DXMATRIX.
//
// Using this class on a compiler that does not actually do the alignment
// can be dangerous since it will not expose bugs that ignore alignment.
// E.g if an object of this class in inside a struct or class, and some code
// memcopys data in it assuming tight packing. This could break on a compiler
// that eventually start aligning the matrix.
//---------------------------------------------------------------------------
#ifdef __cplusplus
typedef struct _D3DXMATRIXA16 : public D3DXMATRIX
{
_D3DXMATRIXA16() {}
_D3DXMATRIXA16( CONST FLOAT * );
_D3DXMATRIXA16( CONST D3DMATRIX& );
_D3DXMATRIXA16( CONST D3DXFLOAT16 * );
_D3DXMATRIXA16( FLOAT _11, FLOAT _12, FLOAT _13, FLOAT _14,
FLOAT _21, FLOAT _22, FLOAT _23, FLOAT _24,
FLOAT _31, FLOAT _32, FLOAT _33, FLOAT _34,
FLOAT _41, FLOAT _42, FLOAT _43, FLOAT _44 );
    // new operators
void* operator new ( size_t );
void* operator new[] ( size_t );
    // delete operators
void operator delete ( void* ); // These are NOT virtual; Do not
void operator delete[] ( void* ); // cast to D3DXMATRIX and delete.
    // assignment operators
_D3DXMATRIXA16& operator = ( CONST D3DXMATRIX& );
} _D3DXMATRIXA16;
#else //!__cplusplus
typedef D3DXMATRIX _D3DXMATRIXA16;
#endif //!__cplusplus

當使用了Intel Pentium 4運行一個D3DX數學函數時,16字節對齊矩陣D3DXMATRIXA16為完成相應操作進行了優化。當使用VC++.net或使用安裝了processor pack的VC6++時,將開啟字節對齊功能。但不幸的是,編譯器無法探測到是否安裝了processor pack,所以字節對齊僅僅只對VC++.net默認開啟。對于其他編譯器,16字節對齊矩陣D3DXMATRIXA16將被當作D3DXMATRIX進行操作。

經過擴展后的結構體D3DXMATRIX和D3DXMATRIXA16對許多運算符進行了重載,所以可以直接進行轉換運算、賦值運算以及多種一元、二元運算,大大方便了矩陣類型變量的運算。

 

4、常見的矩陣運算函數

因為矩陣的運算相對比較復雜,所以Direct3D提供了一組矩陣運算函數,例如,通過函數D3DXMatrixTranslation()構造一個平移矩陣;通過函數D3DXMatrixRotationX()、D3DXMatrixRotationY()和D3DXMatrixRotationZ()構造繞x、y和z軸轉動一定角度的矩陣;通過函數D3DXMatrixScaling()構造一個縮放矩陣;通過函數D3DXMatrxiIdentity()將一個矩陣單位化;通過函數D3DXMatrixMultiply()計算兩個矩陣的積;通過函數D3DXMatrixInverse()求原矩陣的逆矩陣;通過函數D3DXMatrixTranspose()計算原矩陣的轉置矩陣。


posted on 2008-05-02 10:00 lovedday 閱讀(1208) 評論(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>
            亚洲欧洲日韩在线| 激情丁香综合| 久久国产精品久久久久久久久久| 亚洲经典在线看| 欧美国产亚洲视频| 亚洲高清在线精品| 美国十次成人| 欧美成人中文字幕在线| 亚洲成人在线免费| 亚洲国产成人久久综合| 亚洲日本在线观看| 一区二区三区视频在线| 亚洲性感美女99在线| 亚洲欧美久久久| 久久精品国产亚洲一区二区| 久久激情一区| 亚洲国产精品久久久久秋霞不卡 | 9色精品在线| 亚洲一区二区三区四区五区午夜 | 亚洲免费影视第一页| 亚洲欧美在线另类| 久久全国免费视频| 欧美美女bb生活片| 国产精品中文字幕在线观看| 好吊妞**欧美| 日韩午夜剧场| 欧美一区二区三区日韩| 久久综合一区二区三区| 欧美日韩精品伦理作品在线免费观看| 亚洲精品在线观看免费| 午夜精品一区二区三区四区| 久久精品国产亚洲精品| 亚洲电影在线免费观看| 亚洲一区二区在线观看视频| 久久精品国产免费看久久精品| 蜜桃久久av一区| 国产情侣久久| 亚洲精品综合久久中文字幕| 一区二区三区在线视频观看 | 一区久久精品| 午夜精品福利在线| 亚洲激情另类| 久久蜜桃av一区精品变态类天堂| 欧美视频国产精品| 亚洲国产另类久久精品| 性欧美长视频| 一区二区三区不卡视频在线观看| 久久精品一区二区国产| 国产精品美女久久久久久久| 亚洲伦理在线观看| 欧美成人日本| 欧美一区91| 国产精品成人观看视频免费| 亚洲高清网站| 国产一区二区三区精品久久久| 亚洲美女精品成人在线视频| 久久米奇亚洲| 亚洲免费在线观看| 欧美网站在线观看| 99re热这里只有精品视频| 蜜臀va亚洲va欧美va天堂| 亚洲——在线| 国产精品色午夜在线观看| 在线视频欧美一区| 亚洲九九爱视频| 欧美日韩成人一区二区| 亚洲精品男同| 亚洲精品1234| 欧美日韩一区二区三区在线视频| 亚洲精品一区二区三区不| 欧美国产一区二区三区激情无套| 久久精品成人欧美大片古装| 国产一区二区av| 久久九九热免费视频| 亚洲欧美在线看| 国产欧美一区二区色老头| 香蕉成人啪国产精品视频综合网| 一区二区三区偷拍| 国产精品久久久久国产a级| 亚洲淫性视频| 午夜精品久久久| 韩国av一区二区三区| 欧美成人中文字幕| 欧美剧在线免费观看网站| 亚洲午夜精品久久| 亚洲欧美日本视频在线观看| 最近中文字幕日韩精品 | 亚洲激情黄色| 欧美一区二区性| 激情综合激情| 亚洲春色另类小说| 欧美日韩福利| 久久国产精品网站| 久久嫩草精品久久久精品一| 亚洲毛片在线| 亚洲欧美久久久久一区二区三区| 国产一区二区黄| 亚洲成色www8888| 亚洲国产一区二区三区青草影视| 欧美屁股在线| 久久免费的精品国产v∧| 欧美精品久久一区| 久久福利视频导航| 欧美精品1区2区3区| 久久久国产一区二区| 欧美激情视频一区二区三区在线播放 | 亚洲精品视频免费观看| 国产精品色在线| 亚洲国产成人精品久久久国产成人一区| 欧美美女福利视频| 噜噜噜91成人网| 国产精品美女久久久久久2018| 欧美成人国产一区二区| 国产欧美日韩麻豆91| 91久久夜色精品国产九色| 国产一区视频网站| 亚洲精品色图| 亚洲娇小video精品| 亚洲性视频h| 亚洲国产精品精华液2区45| 久久亚洲一区二区三区四区| 欧美屁股在线| 久久婷婷国产麻豆91天堂| 欧美黄色免费| 久久精品一二三区| 国产精品稀缺呦系列在线| 亚洲高清激情| 国产一区二区在线观看免费| 亚洲国产精品久久久久久女王| 国产伦精品一区二区三区视频黑人| 久久午夜影视| 欧美私人啪啪vps| 亚洲成色777777在线观看影院| 国产精品久久久久影院亚瑟| 亚洲人成在线播放网站岛国| 国产一区二区主播在线| 亚洲精品乱码久久久久久日本蜜臀 | 午夜久久久久久| 国产精品每日更新| 亚洲第一黄色| 久久久天天操| 国产精品护士白丝一区av| 欧美激情亚洲视频| 国外成人在线视频| 久久麻豆一区二区| 欧美在线观看天堂一区二区三区| 欧美www在线| 欧美成年人网站| 国产亚洲激情视频在线| 欧美影院一区| 久久成人国产精品| 国产精品自拍网站| 亚洲四色影视在线观看| 夜夜嗨av一区二区三区网站四季av| 久久精品国产91精品亚洲| 欧美亚洲综合另类| 国产精品入口尤物| 亚洲乱码日产精品bd| 国产视频在线观看一区二区三区| 欧美午夜不卡影院在线观看完整版免费| 免费在线成人av| 亚洲电影自拍| 久久综合国产精品台湾中文娱乐网| 亚洲毛片在线观看| 欧美日韩国内| 亚洲午夜极品| 欧美一区深夜视频| 国产有码一区二区| 欧美日本一道本在线视频| 亚洲精品一品区二品区三品区| 亚洲欧洲日本mm| 欧美人与性动交α欧美精品济南到 | 国产精品成人一区二区| 亚洲一区精彩视频| 久久精品成人一区二区三区| 韩日视频一区| 欧美黄色一区二区| 中文高清一区| 久久激情网站| 国产精品久久久久7777婷婷| 欧美在线免费视屏| 欧美成va人片在线观看| 一区二区三区 在线观看视频 | 国产午夜亚洲精品羞羞网站| 久久久蜜桃精品| 亚洲国产精品久久久久秋霞影院 | 亚洲国产一区二区三区a毛片 | 亚洲欧美日韩精品在线| 狠狠色狠狠色综合系列| 欧美a级片网| 亚洲一卡久久| 亚洲精品1区| 亚洲欧美日本视频在线观看| 国产日韩欧美精品| 亚洲黄色性网站| 亚洲国产精品999| 久久精品一区二区国产| 亚洲激情图片小说视频| 国产精品高清一区二区三区| 久久精品国产69国产精品亚洲|