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

            專職C++

            不能停止的腳步

              C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              163 Posts :: 7 Stories :: 135 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(28)

            我參與的團隊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

             1//設置投影矩陣
             2/*
             3    這部分雖然只有少數幾行,由于我的數學全丟給老師了,結果這里是我花時間最多的地方。
             4 */

             5void HGE_Impl::_SetProjectionMatrix(int width, int height)
             6{
             7    D3DXMATRIX tmp;
             8    /*
             9        D3DXMatrixScaling產生的縮放矩陣是讓我不明白地方,實際上,它僅僅起到以X軸旋轉180度作用。
            10        我將D3DXMatrixScaling換成D3DXMatrixRotationX(&matProj,D3DX_PI),結果不變。但這個小小的東西,造成了很大的誤解。
            11
            12        
            13        雖然選旋轉180度,再平移,再正交。但我們理解的順序,卻要完全反過來。
            14        第一:重置坐標系,也就是用正交投影函數。在這里將坐標原點變成屏幕了左下角。這個Y軸向上,X軸向右
            15        第二:平移,將原點向上平移屏幕的高度,這樣原點就變成左上角了。
            16        第三:以X軸旋轉180度,這樣Y軸向下了。
            17        經過這樣的變換后,我們就可以用我們習慣的屏幕坐了。
            18
            19        公式如下:
            20        D3D的坐標矩陣 = 屏幕坐標矩陣* (旋轉矩陣 * 平移矩陣 * 正交矩陣) 注:這里的順序是不能變的
            21        
            22        D3D的坐標矩陣是以屏幕中心為原點,x(-1,1),y(-1,1),z(0,1)的坐標系。
            23
            24        我們可以通過這個坐標系,可以坐標還原屏幕矩陣
            25        公式如下:
            26        X1為D3D坐標矩陣中的X,Y1為D3D坐標矩陣中的Y
            27        X2為還原的還原屏幕X,Y2為還原的還原屏幕Y
            28        X2 = (X1 + 1) * (WINDOW_WIDTH/2);
            29        Y2 = WINDOW_HEIGHT - (Y1 + 1) * (WINDOW_HEIGHT/2);
            30        結果你會發現,這個與你輸入的結果一樣。
            31
            32        另外,在平移過程中,HGE多平移了0.5個單位,這個應該和紋理有關,如果剛好全屏的紋理貼圖,可能邊緣會出現問題。
            33     */

            34    D3DXMatrixScaling(&matProj, 1.0f-1.0f1.0f); 
            35    D3DXMatrixTranslation(&tmp, -0.5f, height+0.5f0.0f); 
            36    D3DXMatrixMultiply(&matProj, &matProj, &tmp); 
            37    D3DXMatrixOrthoOffCenterLH(&tmp, 0, (float)width, 0, (float)height, 0.0f1.0f); 
            38    D3DXMatrixMultiply(&matProj, &matProj, &tmp); 
            39}

            40
            為了證實我理解正確,我用我實現的矩陣模板類,進行了驗證。矩陣的原代碼請參考我前面的隨筆矩陣C++實現模板
             1int main(int argc,char * argv)
             2{
             3    FloatMatrix v1(4,4),v2(4,4),v3(4,4),v(4,4);
             4    FloatMatrix p(1,4),p2(1,4);
             5    XMatrixRotationX(&v1,X_PI);
             6    XMatrixTranslation(&v2, 0.0f600.0f0.0f);
             7    XMatrixOrthoOffCenterLH(&v3, 0800.0f0600.0f0.0f1.0f);
             8    v = v1*v2*v3;
             9    p.Clear(0.0f);
            10    p(1,4= 1.0f;
            11    for(int x = 0; x <= 800; x+= 100)
            12    {
            13        for(int y = 0; y <= 600; y+= 50)
            14        {
            15            p(1,1= (float)(rand()%800);
            16            p(1,2= (float)(rand()%600);
            17            p2 = p * v;
            18            p2(1,1= (p2(1,1+ 1* 400.0f;
            19            p2(1,2= 600- (p2(1,2+ 1* 300.0f;
            20            cout<<"Src("<<p(1,1)<<","<<p(1,2)<<") Dest=("<<p2(1,1)<<","<<p2(1,2)<<")"<<endl;
            21        }

            22    }

            23    system("pause");
            24    return 0;
            25}
            posted on 2010-02-03 18:15 冬瓜 閱讀(2049) 評論(1)  編輯 收藏 引用 所屬分類: 原創DirectXHGE

            Feedback

            # re: HGE的坐標轉換函數注釋說明_SetProjectionMatrix 2010-02-03 18:54 陳梓瀚(vczh)
            搞3D線性代數要好啊……  回復  更多評論
              

            精品国产乱码久久久久久呢| 久久综合九色综合久99| 99久久人妻无码精品系列蜜桃| 美女久久久久久| 精品久久久久久99人妻| 久久婷婷综合中文字幕| 亚洲中文字幕无码久久2020| 亚洲狠狠婷婷综合久久蜜芽 | 久久久久亚洲精品日久生情 | 午夜欧美精品久久久久久久| 四虎国产精品成人免费久久| 久久99精品久久久久久噜噜| 精品久久久久中文字幕日本| 欧洲成人午夜精品无码区久久 | 色综合久久最新中文字幕| 国产精品久久亚洲不卡动漫| 久久久婷婷五月亚洲97号色| 一本久久a久久精品亚洲| 人妻少妇久久中文字幕一区二区| 无码伊人66久久大杳蕉网站谷歌| 青青草原精品99久久精品66| 久久久无码人妻精品无码| 国产成人久久激情91| 国产精品丝袜久久久久久不卡| AA级片免费看视频久久| 久久久久亚洲精品无码网址| 亚洲精品无码久久毛片| 五月丁香综合激情六月久久 | 久久久久成人精品无码 | 久久久久亚洲精品男人的天堂| 日日狠狠久久偷偷色综合0| 久久久久久免费视频| 久久久无码一区二区三区| 九九99精品久久久久久| 伊人久久大香线焦综合四虎| 久久男人中文字幕资源站| 精品久久久久久久国产潘金莲| 欧美熟妇另类久久久久久不卡| 久久精品国产福利国产秒| 四虎亚洲国产成人久久精品| 久久精品国产亚洲AV嫖农村妇女|