• <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 千張 閱讀(1271) 評論(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无码免费网| 国产ww久久久久久久久久| 婷婷久久精品国产| 久久人妻AV中文字幕| 精品久久久久久综合日本| 久久久久97国产精华液好用吗| 色婷婷狠狠久久综合五月| 久久精品aⅴ无码中文字字幕重口 久久精品a亚洲国产v高清不卡 | 久久午夜福利电影| 浪潮AV色综合久久天堂| 久久播电影网| 久久国产精品国产自线拍免费 | 中文无码久久精品| 久久九九亚洲精品| 亚洲级αV无码毛片久久精品| 9999国产精品欧美久久久久久| 色综合久久夜色精品国产| 久久精品免费观看| 久久久噜噜噜久久中文福利| 一个色综合久久| 伊人久久免费视频| 久久99国产精品久久99| 久久午夜伦鲁片免费无码| 久久久久久久波多野结衣高潮| 国产99久久久久久免费看| 亚洲国产天堂久久综合网站| 久久人人爽人人爽人人AV | 久久久久99精品成人片三人毛片| 国内精品久久久久| 久久精品无码专区免费东京热 | 久久国产免费观看精品| 99久久国产综合精品女同图片| 色综合久久88色综合天天 | 丁香五月综合久久激情| 国产精品成人99久久久久| 久久综合中文字幕| 99精品伊人久久久大香线蕉| 狠狠综合久久综合中文88| 久久久久国产| 精品久久亚洲中文无码| 久久久久亚洲AV无码网站|