• <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 千張 閱讀(1261) 評論(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點就構成所需要的照相機坐標系。

            国产精品热久久无码av| 伊人 久久 精品| 亚洲女久久久噜噜噜熟女| 色综合久久久久久久久五月| 久久精品国产99久久久| 久久777国产线看观看精品| 久久福利青草精品资源站免费| 国产精品成人99久久久久91gav| 四虎亚洲国产成人久久精品| 久久天天躁狠狠躁夜夜不卡| 国产精品免费福利久久| 久久黄视频| 亚洲AV成人无码久久精品老人| 18岁日韩内射颜射午夜久久成人| 久久综合久久鬼色| 狠狠干狠狠久久| 久久久久久精品无码人妻| 女人香蕉久久**毛片精品| 欧美日韩精品久久久久 | 99久久精品日本一区二区免费 | 久久天天躁夜夜躁狠狠躁2022 | 岛国搬运www久久| 日本五月天婷久久网站| 久久成人国产精品一区二区| 性做久久久久久久久浪潮| 亚洲国产成人久久精品影视| 久久精品国产AV一区二区三区 | 亚洲精品综合久久| 天天爽天天爽天天片a久久网| 2021国产精品久久精品| 成人亚洲欧美久久久久 | 中文字幕无码久久久| 91精品国产色综久久| 狠狠久久亚洲欧美专区| 国产69精品久久久久APP下载 | 国产成人精品久久二区二区| A级毛片无码久久精品免费| 久久婷婷人人澡人人| 爱做久久久久久| 国产精品青草久久久久福利99 | 久久久久久久综合狠狠综合|