• <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點就構成所需要的照相機坐標系。

            亚洲精品国产字幕久久不卡| 亚洲七七久久精品中文国产| 性欧美丰满熟妇XXXX性久久久 | 国产精品久久久久影院色| 久久久亚洲精品蜜桃臀| 精品国产91久久久久久久| 久久天天躁狠狠躁夜夜2020一| 91精品国产高清久久久久久国产嫩草| 性高朝久久久久久久久久| 99久久精品国内| 久久一区二区三区99| 久久精品国产亚洲av麻豆小说| 久久婷婷五月综合色奶水99啪| 久久精品99久久香蕉国产色戒 | 久久无码国产专区精品| 日本加勒比久久精品| 久久久久免费看成人影片| 久久久久亚洲精品中文字幕| 91视频国产91久久久| A级毛片无码久久精品免费| 久久亚洲精品无码aⅴ大香| 久久精品国产99国产电影网| 久久久久亚洲AV无码专区首JN| 久久久久无码中| 久久久久久久久久免免费精品| 久久精品无码一区二区WWW| 午夜精品久久久久久| 国产免费久久精品99久久| 欧美精品丝袜久久久中文字幕 | 久久久久久亚洲精品影院| 无码任你躁久久久久久老妇App| 国产亚洲美女精品久久久| 久久人人爽人人澡人人高潮AV| 国内精品伊人久久久久| 久久精品毛片免费观看| 久久国产热精品波多野结衣AV| 狠狠综合久久AV一区二区三区| 久久狠狠爱亚洲综合影院 | 亚洲午夜无码AV毛片久久| 亚洲国产精品无码久久久久久曰 | 国产精品亚洲综合专区片高清久久久 |