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

            千張筆記

            Email:rain_qian830@163.com
            posts - 28, comments - 42, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            【原】Directx繪制三角形

            Posted on 2008-08-26 20:16 千張 閱讀(1253) 評論(0)  編輯 收藏 引用 所屬分類: 圖形學(xué)

            本文的任務(wù)是在屏幕中間繪制出一個(gè)三角形。根據(jù)前面文章的介紹,現(xiàn)在我們主要改寫Setup,Cleanup和Display三個(gè)函數(shù)。

            第一步:
            定義頂點(diǎn)結(jié)構(gòu)體及格式(不能隨心所欲地定義,具體規(guī)則查閱Directx SDK),頂點(diǎn)和索引緩沖區(qū)等,這些變量為全局變量。


            第二步:
            改寫Setup,Cleanup和Display三個(gè)函數(shù)
            Setup函數(shù):
                     1. 創(chuàng)建頂點(diǎn)緩沖區(qū)和索引緩沖區(qū)(若程序中沒有用到索引,則不用創(chuàng)建索引緩沖區(qū)),具體函數(shù)如下:
                     Device->CreateVertexBuffer(
                                3 * sizeof(Vertex), // size in bytes
                                D3DUSAGE_WRITEONLY, // flags
                                Vertex::FVF,        // vertex format
                                D3DPOOL_MANAGED,    // managed memory pool
                                &Triangle,          // return create vertex buffer
                                0);                 // not used - set to 0
                     該函數(shù)中Triangle為返回的頂點(diǎn)緩沖區(qū)首地址。
                     在訪問緩沖區(qū)內(nèi)容時(shí)必須使用Lock方法(Triangle->Lock(...).......Triangle->Unlock())。

                     2.視圖空間變換
                     視圖變換的定義:我們將攝像機(jī)平移變換到世界坐標(biāo)系的原點(diǎn)并把它的方向旋轉(zhuǎn)至朝向Z軸的正方向,世界坐標(biāo)系中的所有物體都將  隨著攝像機(jī)的變換而做相同的變換,這個(gè)變換就叫做視圖空間變換。
                    
                     我對D3DXMatrixLookAtLH函數(shù)的理解(若有錯(cuò)請幫忙指出):
                     D3DXMATRIX * D3DXMatrixLookAtLH(
                             D3DXMATRIX *pOut,
                             CONST D3DXVECTOR3 *pEye,
                             CONST D3DXVECTOR3 *pAt,
                             CONST D3DXVECTOR3 *pUp
                     );
                    參數(shù)pOut是一個(gè)矩陣,用于存儲(chǔ)返回的視圖變換矩陣,pEye是一個(gè)位置,即一個(gè)點(diǎn),它表示攝像機(jī)的位置,相當(dāng)于人的眼睛的位置,pAt也是一個(gè)位置,它與點(diǎn)pEye構(gòu)成一條射線,這條射線的方向就是攝像機(jī)的透視體的中心軸的方向,相當(dāng)于眼睛的視線方向,pUp是一個(gè)向量,這個(gè)向量和攝像機(jī)的+z軸求叉積,得到X軸的方向,然后,+z軸和X軸求叉積再計(jì)算出Y軸的方向,這就求出一個(gè)三角坐標(biāo)系。

                    3.投影變換
                    D3DXMATRIX * D3DXMatrixPerspectiveFovLH(
                         D3DXMATRIX *pOut, 
                         FLOAT fovy,      
                         FLOAT Aspect,
                         FLOAT zn,
                         FLOAT zf
                    );
                    例如:
                    D3DXMatrixPerspectiveFovLH(
                                 &proj,                        // result
                                 D3DX_PI * 0.5f,               // 90 - degrees
                                 (float)Width / (float)Height, // aspect ratio
                                 1.0f,                         // near plane
                                 1000.0f);                     // far plane
             
                    4.設(shè)置渲染模式
                    Device->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME);
            Cleanup函數(shù):
                    d3d::Release<IDirect3DVertexBuffer9*>(Triangle);//釋放緩沖區(qū)
            Display函數(shù):
                    1.設(shè)置資源流;
                    2.設(shè)置頂點(diǎn)格式;
                    3.設(shè)置索引緩沖區(qū)。

            具體代碼見翁云兵書《3D游戲程序設(shè)計(jì)入門(Directx9)》代碼中的Triangle。

            PS:今天看《交互式計(jì)算機(jī)圖形學(xué)--基于opengl的自頂向下方法》這本書時(shí),看到關(guān)于照相機(jī)定位的章節(jié),我對D3DXMatrixLookAtLH函數(shù)的理解有一點(diǎn)錯(cuò)誤。
            現(xiàn)在改正如下:
            參數(shù)pOut是一個(gè)矩陣,用于存儲(chǔ)返回的視圖變換矩陣,pEye是一個(gè)位置,即一個(gè)點(diǎn),它表示攝像機(jī)的位置,相當(dāng)于人的眼睛的位置,pAt也是一個(gè)位置,它與點(diǎn)pEye構(gòu)成一條射線,這條射線的方向就是攝像機(jī)的透視體的中心軸的方向,相當(dāng)于眼睛的視線方向,pUp是一個(gè)向量,把pUp向量投影到視圖平面上,得到視線的向上方向v,v和pAt垂直,這兩個(gè)向量求叉積可以得到第三個(gè)向量u,這三個(gè)向量加上pEye點(diǎn)就構(gòu)成所需要的照相機(jī)坐標(biāo)系。

            伊人热热久久原色播放www| 大伊人青草狠狠久久| 久久久久亚洲精品无码网址| 久久国产精品无码网站| 一日本道伊人久久综合影| 久久精品人人槡人妻人人玩AV| 久久精品国产99国产电影网| 久久综合狠狠综合久久97色| 99久久无码一区人妻a黑| 久久99精品国产麻豆蜜芽| 伊人情人综合成人久久网小说| 久久精品人人做人人爽电影蜜月 | 国产精品岛国久久久久| 久久精品免费大片国产大片| 国产美女亚洲精品久久久综合| 狠狠精品干练久久久无码中文字幕| 漂亮人妻被中出中文字幕久久| 久久精品国产精品国产精品污| 日本久久久久久久久久| 99久久精品九九亚洲精品| 亚洲AV日韩精品久久久久| 欧美日韩中文字幕久久久不卡 | 人妻无码久久精品| 久久青青草原精品影院| 人妻精品久久久久中文字幕一冢本| 久久99国产精品成人欧美| 999久久久无码国产精品| 97久久国产综合精品女不卡| 日批日出水久久亚洲精品tv| 伊人久久免费视频| 久久免费国产精品一区二区| 97久久精品无码一区二区| 久久精品国产亚洲av水果派| 国产成人精品综合久久久久 | 国产91久久精品一区二区| 东方aⅴ免费观看久久av| 日本WV一本一道久久香蕉| 久久久噜噜噜久久中文字幕色伊伊| 久久久久婷婷| 无码任你躁久久久久久老妇| 久久久这里有精品中文字幕|