• <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 千張 閱讀(1253) 評論(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中文字幕无码久久久妻妇| 久久精品无码一区二区WWW| 日韩人妻无码一区二区三区久久 | 久久99精品久久久久久动态图| 久久亚洲日韩看片无码| 久久精品亚洲一区二区三区浴池| 精品免费tv久久久久久久| 久久综合九色综合久99| 无码国产69精品久久久久网站| 国内精品伊人久久久久| 九九久久精品国产| 蜜臀av性久久久久蜜臀aⅴ麻豆| 国产福利电影一区二区三区久久久久成人精品综合 | 久久久久亚洲av成人无码电影| 色妞色综合久久夜夜| 国产精品成人99久久久久| 国内精品久久久久久久久电影网| 东京热TOKYO综合久久精品| 色婷婷噜噜久久国产精品12p| 精品国际久久久久999波多野| 国产ww久久久久久久久久| 国产亚洲综合久久系列| 久久久久久久91精品免费观看| 国产精品无码久久久久| 久久精品人妻中文系列| 欧美久久亚洲精品| 久久精品国产亚洲AV不卡| 一本一道久久综合狠狠老| 观看 国产综合久久久久鬼色 欧美 亚洲 一区二区 | 国内精品久久人妻互换| 日日躁夜夜躁狠狠久久AV| 精品久久久久久久国产潘金莲| 国产精品免费久久久久电影网| 久久精品亚洲精品国产色婷| 波多野结衣久久| 精品久久久久久久国产潘金莲| 亚洲国产高清精品线久久 | 日韩美女18网站久久精品| 国内高清久久久久久| 欧美亚洲国产精品久久久久| 久久免费视频1|