• <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++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            【原】Directx繪制三角形

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

            本文的任務是在屏幕中間繪制出一個三角形。根據前面文章的介紹,現在我們主要改寫Setup,Cleanup和Display三個函數。

            第一步:
            定義頂點結構體及格式(不能隨心所欲地定義,具體規則查閱Directx SDK),頂點和索引緩沖區等,這些變量為全局變量。


            第二步:
            改寫Setup,Cleanup和Display三個函數
            Setup函數:
                     1. 創建頂點緩沖區和索引緩沖區(若程序中沒有用到索引,則不用創建索引緩沖區),具體函數如下:
                     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
                     該函數中Triangle為返回的頂點緩沖區首地址。
                     在訪問緩沖區內容時必須使用Lock方法(Triangle->Lock(...).......Triangle->Unlock())。

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

                    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.設置渲染模式
                    Device->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME);
            Cleanup函數:
                    d3d::Release<IDirect3DVertexBuffer9*>(Triangle);//釋放緩沖區
            Display函數:
                    1.設置資源流;
                    2.設置頂點格式;
                    3.設置索引緩沖區。

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

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

            97视频久久久| 国产精品激情综合久久| 欧美一区二区三区久久综| 久久笫一福利免费导航| 久久综合精品国产二区无码| 欧美综合天天夜夜久久| 久久精品中文字幕大胸| AAA级久久久精品无码片| 色诱久久av| 国产精品免费看久久久| 九九精品久久久久久噜噜| 久久91精品国产91久久户| 九九精品久久久久久噜噜| 国产精品免费久久久久久久久| 狠狠色狠狠色综合久久| 精品人妻伦九区久久AAA片69| 亚洲AV无码一区东京热久久| 久久夜色精品国产亚洲av| 久久国产精品成人免费| 性欧美丰满熟妇XXXX性久久久| 久久天天日天天操综合伊人av | 久久人与动人物a级毛片| 99久久99久久精品国产| 久久AV高清无码| 久久婷婷五月综合色奶水99啪 | 伊人久久大香线蕉亚洲五月天 | 久久精品一区二区三区AV| 久久伊人影视| 久久久久亚洲AV成人网人人网站| 久久99国产精品一区二区| 久久99国产精品久久99| 99久久99久久精品免费看蜜桃| 亚洲人成伊人成综合网久久久 | 久久精品成人国产午夜| 久久99精品久久久久婷婷| 69国产成人综合久久精品| 亚洲国产精品无码久久一区二区| 一本一道久久综合狠狠老 | 色欲久久久天天天综合网精品| 伊人久久久AV老熟妇色| 色妞色综合久久夜夜|