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

天行健 君子當自強而不息

頂點坐標變換(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>
            可以免费看不卡的av网站| 日韩视频中文字幕| 欧美一区二区三区另类| 在线视频一区观看| 亚洲精品中文字幕女同| 91久久综合亚洲鲁鲁五月天| 欧美91福利在线观看| 老司机午夜免费精品视频| 久久精品亚洲一区二区| 久久精品亚洲一区二区三区浴池| 亚洲自拍啪啪| 久久精品视频va| 另类激情亚洲| 日韩午夜免费| 久久99在线观看| 欧美大尺度在线观看| 亚洲欧美日韩精品在线| 亚洲欧美日韩在线综合| 久久精品女人的天堂av| 亚洲二区在线视频| 亚洲少妇自拍| 美女视频一区免费观看| 国产精品a久久久久| 国产一区二区你懂的| 亚洲国产专区校园欧美| 欧美亚洲一区二区在线| 欧美国产日产韩国视频| 亚洲一区视频在线观看视频| 麻豆国产va免费精品高清在线| 欧美日韩国产影片| 亚洲黄色大片| 你懂的国产精品永久在线| 亚洲一区二区免费| 欧美日本簧片| 一区二区三区自拍| 亚洲综合精品四区| 亚洲二区在线视频| 欧美色网在线| 美乳少妇欧美精品| 欧美日韩一区二区三区免费| 欧美在线在线| 欧美系列精品| 欧美激情成人在线| 国产精品久久久久久久久久尿| 免费视频一区| 黑人一区二区三区四区五区| 一二三区精品福利视频| 亚洲国产日韩欧美在线图片| 香蕉精品999视频一区二区| 99香蕉国产精品偷在线观看| 久久久久久亚洲精品杨幂换脸 | 亚洲欧美一区二区三区在线| 久久久久久久精| 午夜精品久久久久久久久久久久| 欧美精品v国产精品v日韩精品| 欧美大色视频| 黄色成人91| 久久国产手机看片| 女女同性女同一区二区三区91| 国产综合色在线| 久久久99国产精品免费| 欧美福利视频在线| 在线一区观看| 欧美激情精品久久久久久久变态| 久久国产视频网| 国产一区二区三区网站 | 欧美成人情趣视频| 欧美日韩亚洲综合| 欧美高清你懂得| 136国产福利精品导航| 欧美诱惑福利视频| 毛片av中文字幕一区二区| 国产精品一区二区女厕厕| 亚洲国产精品美女| 伊人久久噜噜噜躁狠狠躁| 性做久久久久久| 欧美黄色免费| 亚洲精品久久久久久一区二区| 亚洲私人影吧| 久久国产精品久久久久久| 国产精品美女一区二区在线观看| 亚洲视频免费在线观看| 国产专区一区| 午夜一级久久| 欧美激情精品久久久久久久变态| 久久先锋资源| 91久久午夜| 国产精品v亚洲精品v日韩精品| 亚洲欧洲av一区二区| 欧美成人免费大片| 先锋资源久久| 日韩一区二区久久| 国产精品美女主播| 蜜臀av性久久久久蜜臀aⅴ| 亚洲韩国一区二区三区| 99精品国产在热久久| 国产欧美日韩三区| 国产精品qvod| 国产一区日韩欧美| 亚洲精品日韩久久| 亚洲综合色在线| 久久久久久久综合日本| 亚洲第一中文字幕在线观看| 欧美中文在线视频| 香蕉久久精品日日躁夜夜躁| 国产精品99久久久久久久久| 亚洲视频成人| 亚洲韩国一区二区三区| 亚洲国产mv| 亚洲精品在线免费观看视频| 国内成人精品一区| 亚洲精品老司机| 亚洲国产欧美一区二区三区丁香婷| 国产精品手机在线| 国产日韩专区| 久久精品中文字幕一区| 欧美亚洲系列| 91久久久在线| 欧美在线999| 玖玖玖国产精品| 99这里有精品| 免费在线看一区| 国产欧美日韩亚洲精品| 亚洲精品欧美| 欧美午夜一区二区| 国产在线不卡| 久久精品国产2020观看福利| 欧美在线网址| 99精品视频免费观看| 欧美成人网在线| 欧美一级片在线播放| 亚洲国产日韩欧美| 国模一区二区三区| 国产欧美日韩精品一区| 欧美精品一区二区三区蜜桃| 欧美怡红院视频| 亚洲欧美文学| 亚洲综合第一页| 亚洲伦理在线观看| 亚洲精品免费在线| 亚洲人体大胆视频| 亚洲国产一区二区三区高清| 午夜宅男欧美| 香蕉久久国产| 蜜臀va亚洲va欧美va天堂| 久久久国产精品亚洲一区| 美女久久网站| 亚洲精品中文字幕在线| 欧美成人一区二区三区片免费| 日韩一二在线观看| 欧美在线影院在线视频| 香蕉久久夜色精品国产| 欧美一区二区三区免费视频| 亚洲精品免费一区二区三区| 欧美日韩久久| 欧美α欧美αv大片| 亚洲国产一区二区在线| 久久精品视频亚洲| 欧美激情精品久久久久久| 亚洲另类视频| 久久福利视频导航| 欧美韩国日本一区| 国产欧美另类| 亚洲茄子视频| 欧美午夜精品久久久久久超碰| 亚洲一区二区三区四区中文 | 久久精品91| 激情视频一区二区三区| 老巨人导航500精品| 夜夜嗨网站十八久久| 欧美一级黄色网| 亚洲经典三级| 国产欧美日韩视频一区二区三区| 浪潮色综合久久天堂| 国产精品99久久久久久人| 久久综合亚洲社区| 亚洲综合首页| 亚洲精品1区2区| 国产精品一区久久久| 欧美国产第一页| 久久国产视频网站| 亚洲色图自拍| 亚洲人成亚洲人成在线观看| 久久久视频精品| 亚洲综合精品一区二区| 亚洲人成亚洲人成在线观看| 国产一区二区三区视频在线观看| 欧美日韩三级在线| 欧美成人一二三| 久色婷婷小香蕉久久| 香蕉久久夜色精品国产| 一本一本久久a久久精品牛牛影视| 男同欧美伦乱| 噜噜噜躁狠狠躁狠狠精品视频 | 久久亚洲国产精品一区二区| 亚洲专区欧美专区| 夜夜嗨av一区二区三区网页| 亚洲高清视频在线观看| 免费久久99精品国产自在现线| 久久精品国产77777蜜臀|