• <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>

            天行健 君子當(dāng)自強(qiáng)而不息

            D3D編程必備的數(shù)學(xué)知識(shí)(3)

            矩陣

            在這一部分我們關(guān)注的焦點(diǎn)是數(shù)學(xué)中的矩陣。它們?cè)?D圖形學(xué)中的應(yīng)用將在下一部分講解。

            一個(gè)m×n的矩陣是由m行和n列的數(shù)字組成的矩陣列。行和列的數(shù)字就是這個(gè)矩陣的維數(shù)。我們通過(guò)寫(xiě)在下方的數(shù)字識(shí)別矩陣清單,數(shù)字中的第一個(gè)表示行第二個(gè)表示列。例如下邊的M是3×3矩陣,B是2×4矩陣, C是3×2矩陣。

            我們使用加粗的大寫(xiě)字母表示矩陣。有時(shí)一個(gè)矩陣只包含一行或者一列。我們用行矩陣和列矩陣這個(gè)特殊的名稱(chēng)來(lái)稱(chēng)呼。例如下邊就是行和列矩陣:

             

            當(dāng)使用行或列矩陣時(shí),我們只用一個(gè)下標(biāo),有時(shí)我們還用字母表示。

             

             

             

             

            D3DX 矩陣

            當(dāng)設(shè)計(jì)Direct3D應(yīng)用程序時(shí),使用4×4矩陣和1×4行矩陣(向量)是有代表性的。注意使用這兩種矩陣意味著可以進(jìn)行下列定義的矩陣乘法。

            n       向量-矩陣乘法。即,假如1×4的單行矩陣V,和4×4的矩陣T,那么積VT可計(jì)算并且返回的結(jié)果是一個(gè)1×4的單行矩陣(向量)。

            n       矩陣-矩陣乘法。即,假如4×4的矩陣T,和4×4的矩陣R,那么積TRRT可計(jì)算并且兩者返回的結(jié)果都是一個(gè)4×4的矩陣。注意因?yàn)榫仃嚦朔ú粷M(mǎn)足交換律所以TRRT不一定相等。

            在D3DX中表示1×4的行矩陣(向量),我們用D3DXVECTOR3和D3DXVECTOR4向量類(lèi)。當(dāng)然D3DXVECTOR3只有3個(gè)成員,不是4個(gè)。然而,第4個(gè)成員缺省是1或0(在下一部分有更多信息)。

            在D3DX中表示4×4的矩陣,我們用D3DXMATRIX類(lèi),定義如下:

            typedef struct D3DXMATRIX : public D3DMATRIX
            {
            public:
            D3DXMATRIX() {};
            D3DXMATRIX(CONST FLOAT*);
            D3DXMATRIX(CONST D3DMATRIX&);
            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;

            The D3DXMATRIX class inherits its data entries from the simpler D3DMATRIX structure, which is defined as:

            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;

            觀察D3DXMATRIX類(lèi)發(fā)現(xiàn)有很多有用的運(yùn)算符,比如對(duì)矩陣檢測(cè)相等,矩陣相加和矩陣相減,標(biāo)量與矩陣相乘,類(lèi)型轉(zhuǎn)換(casting),以及非常重要的兩個(gè)D3DXMATRIXs相乘。因?yàn)榫仃囅喑耸欠浅V匾模覀兘o出一段實(shí)例代碼:

            D3DXMATRIX A(…); // initialize A

            D3DXMATRIX B(…); // initialize B

            D3DXMATRIX C = A * B; // C = AB

             

            D3DXMATRIX類(lèi)另一個(gè)重要的運(yùn)算符是小括號(hào),它允許我們非常方便的為矩陣成員賦值。注意當(dāng)使用小括號(hào)時(shí)我們的下標(biāo)就象C語(yǔ)言數(shù)組下標(biāo)一樣是從0開(kāi)始的。例如,為一個(gè)矩陣的ij = 11 賦值,我們寫(xiě)成:

            D3DXMATRIX M;

            M(0, 0) = 5.0f; // Set entry ij = 11 to 5.0f.

            D3DX庫(kù)也提供下列有用的函數(shù):將D3DXMATRIX轉(zhuǎn)化為單位矩陣,轉(zhuǎn)置D3DXMATRIX矩陣以及求逆矩陣。

            D3DXMATRIX *D3DXMatrixIdentity(

                          D3DXMATRIX *pout // 將矩陣轉(zhuǎn)換為單位矩陣

            );

            D3DXMATRIX M;

            D3DXMatrixIdentity( &M ); // M = 單位矩陣

             

            D3DXMATRIX *D3DXMatrixTranspose(

                   D3DXMATRIX *pOut, // 輸出的轉(zhuǎn)置矩陣

                   CONST D3DXMATRIX *pM // 原矩陣

            );

            D3DXMATRIX A(...); // 初始化矩陣A

            D3DXMATRIX B;

            D3DXMatrixTranspose( &B, &A ); // B = 輸出的轉(zhuǎn)置矩陣

             

            假如我們將不能求逆的矩陣用求逆函數(shù),那么函數(shù)將會(huì)返回null.同樣的,這本書(shū)我們忽視第二個(gè)參數(shù),并且總是把它設(shè)置為0。

            D3DXMATRIX *D3DXMatrixInverse(

                   D3DXMATRIX *pOut, // 輸出的逆矩陣

                   FLOAT *pDeterminant, // 除非是必需的,一般設(shè)為0

                   CONST D3DXMATRIX *pM // 原矩陣

            );

            D3DXMATRIX A(...); // 初始化矩陣

            D3DXMATRIX B;

            D3DXMatrixInverse( &B, 0, &A ); // B = A的逆矩陣


            posted on 2008-03-12 12:18 lovedday 閱讀(2510) 評(píng)論(0)  編輯 收藏 引用


            只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            公告

            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            隨筆分類(lèi)(178)

            3D游戲編程相關(guān)鏈接

            搜索

            最新評(píng)論

            国产精品久久久久久久app| 精品久久久久久无码中文字幕一区| 亚洲国产精品久久| 怡红院日本一道日本久久 | 亚洲精品无码成人片久久| 97久久天天综合色天天综合色hd| 四虎国产永久免费久久| 国产精品亚洲综合久久| 久久精品国产99国产精偷| 一级做a爰片久久毛片看看| 久久99精品久久久久久久久久| 久久久久久久综合日本| 国产人久久人人人人爽| 国产偷久久久精品专区| 久久国产精品免费| 2020久久精品国产免费| 中文精品久久久久人妻不卡| 久久精品国产国产精品四凭| 久久精品国产亚洲沈樵| 伊人久久精品无码二区麻豆| 久久男人中文字幕资源站| 久久er国产精品免费观看2| 无码精品久久久天天影视| 久久亚洲精品国产亚洲老地址 | 国产精品久久久久无码av| 久久精品无码一区二区WWW| 热综合一本伊人久久精品| 久久精品国产一区二区三区不卡| 成人国内精品久久久久影院| 久久99精品久久久久久久不卡 | 91视频国产91久久久| 久久精品国产久精国产思思| 亚洲狠狠婷婷综合久久久久| 亚洲精品乱码久久久久久蜜桃图片 | 国内精品久久久久久野外| …久久精品99久久香蕉国产| 精品久久久无码人妻中文字幕豆芽| 久久精品黄AA片一区二区三区| 香蕉久久av一区二区三区| 久久精品国产亚洲AV无码麻豆| 熟妇人妻久久中文字幕|