• <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>

            實(shí)時陰影繪制技術(shù)研究

            C++博客 首頁 新隨筆 聯(lián)系 聚合 管理
              48 Posts :: 20 Stories :: 57 Comments :: 0 Trackbacks
            今天看了書中Basic2的例子,主要在兩個方面:
            1. 如何將紋理映射到對象上;
            2. 如何使用框架提供的字體類。

            為了貼一張2D紋理要做的事情:

            1. 在頂點(diǎn)結(jié)構(gòu)中使用2個紋理坐標(biāo)變量,并將其一起填充到頂點(diǎn)緩沖器中;
            2. 在InitDeviceObjects()函數(shù)中,使用D3DUtil_CreateTexture()創(chuàng)建紋理;
            3. 在Render()函數(shù)中,根據(jù)相應(yīng)的狀態(tài)使用SetTexture()設(shè)置紋理;
            4. 在DeleteDeviceObjects()中,使用SAFE_RELEASE()宏釋放紋理。

            紋理是一種設(shè)備相關(guān)的資源,因此要在InitDeviceObject()中創(chuàng)建。紋理經(jīng)過了:創(chuàng)建->設(shè)置->釋放,這樣一個生存周期。

            字體的使用相對比較簡單,在應(yīng)用程序類的構(gòu)造函數(shù)里邊創(chuàng)建字體類的對象,然后在對應(yīng)的函數(shù)中調(diào)用字體類的函數(shù)就可以了。注意的是:在Render()里邊調(diào)用的是DrawText(),其他都是同名函數(shù)。最后在析構(gòu)函數(shù)中刪除字體類對象。

            下面來看一下代碼。
            • 應(yīng)用程序類的構(gòu)造函數(shù)中創(chuàng)建字體類對象的代碼:

            m_pFont = new CD3DFont( _T("Arial"), 12, D3DFONT_BOLD );

            • InitDeviceObjects()函數(shù)

            HRESULT CMyD3DApplication::InitDeviceObjects()
            {
                m_pFont->InitDeviceObjects( m_pd3dDevice );//
            字體的對應(yīng)函數(shù)

                // 載入一張圖片來創(chuàng)建紋理
                if( FAILED( D3DUtil_CreateTexture( m_pd3dDevice, _T("Lake.bmp"),
                                                   &m_pBackgroundTexture) ) )
                    return D3DAPPERR_MEDIANOTFOUND;

                return S_OK;
            }

            • RestoreDeviceObjects()函數(shù)基本沒有變化,只是添加一個m_pFont->RestoreDeviceObjects();然后把帶有紋理坐標(biāo)的頂點(diǎn)數(shù)據(jù)拷貝到緩存中,注意紋理坐標(biāo)全部位于[0,1]之間。
            • Render()函數(shù)

            HRESULT CMyD3DApplication::Render()
            {
                // Begin the scene
                if( SUCCEEDED( m_pd3dDevice->BeginScene() ) )
                {
              // Set up texture stage states for the background
              m_pd3dDevice->SetTexture( 0, m_pBackgroundTexture );
            //將紋理指定給設(shè)備的某個特定階段,D3D提供8個紋理階段,這意味著在一次DrawPrimitive()調(diào)用同時設(shè)置最多8張紋理;當(dāng)然也可以多次調(diào)用DrawPrimitive(),稱之為多遍繪制(multi-pass),SetTexture()的第一個參數(shù)就是希望使用的紋理階段編號,可以為每個階段指定一個紋理.但程序中指定了當(dāng)前紋理,在改變之前所有的圖元繪制都會采用該紋理,也就是說如果每個圖元都有自己的紋理,那么在繪制之前都要設(shè)置其相應(yīng)的紋理
              m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );//指定第一個參數(shù)是SetTexture()設(shè)置的紋理顏色
              m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP,   D3DTOP_SELECTARG1 );//
            通過D3DTSS_COLOROP來選擇一個顏色操作,D3DTOP_SELECTARG1告知紋理單元使用第一個參數(shù)作為輸出。這兩句的共同作用就是指定輸出為所設(shè)置紋理的顏色。

            //SetTextureStageState()可用于在不同的Materail之間對顏色和alpha做混合,可用于指定D3D紋理引擎和象素引擎的操作和參數(shù)。第一個參數(shù)給出要使用的紋理,即哪個階段的問題,第2個參數(shù)是系統(tǒng)設(shè)置的紋理狀態(tài)類型。有兩種主要類型:D3DTSS_COLORx系列和D3DTSS_ALPHAx系列,分別控制一個RGB向量和一個Alpha標(biāo)量在通過象素處理流水線中可并行處理部分的操作。

              // Passing an FVF to IDirect3DDevice9::SetFVF specifies a legacy FVF with stream 0.
                 m_pd3dDevice->SetFVF(FVF );
              m_pd3dDevice->SetStreamSource( 0, m_pVB, 0, sizeof(VERTEX) );
                 m_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLEFAN, 0, 2 );

                    // Output statistics
                    m_pFont->DrawText( 2,  0, D3DCOLOR_ARGB(255,255,255,0), m_strFrameStats );//繪制幀率
                    m_pFont->DrawText( 2, 20, D3DCOLOR_ARGB(255,255,255,0), m_strDeviceStats );//
            繪制設(shè)備

                  // End the scene.
                  m_pd3dDevice->EndScene();
                }

                return S_OK;
            }

            • 其他略過,凡是在對應(yīng)函數(shù)中創(chuàng)建的記得在對應(yīng)的銷毀函數(shù)中干掉就行了。



            轉(zhuǎn)自:http://blog.sina.com.cn/u/40d00f17010001c3

            posted on 2005-12-27 22:27 苦行僧 閱讀(1213) 評論(2)  編輯 收藏 引用 所屬分類: directX

            Feedback

            # re: 我的directX編程學(xué)習(xí)(3)-紋理映射與使用字體 2006-03-16 14:09 小銀子
            不錯! 學(xué)習(xí)  回復(fù)  更多評論
              

            # re: 我的directX編程學(xué)習(xí)(3)-紋理映射與使用字體 2006-06-18 00:48 cgdh
            圖太朦,看不清。  回復(fù)  更多評論
              

            久久精品蜜芽亚洲国产AV| 国产Av激情久久无码天堂| 久久99精品久久久久久9蜜桃 | 久久精品国产亚洲AV不卡| 欧美精品九九99久久在观看| 久久精品国产久精国产果冻传媒| 久久香综合精品久久伊人| 久久超乳爆乳中文字幕| 国产99久久久久久免费看| 久久AV无码精品人妻糸列| 青青草原1769久久免费播放| 久久久久久久综合日本| 久久综合狠狠综合久久| 久久久久人妻精品一区三寸蜜桃| 日韩av无码久久精品免费| 精品国产一区二区三区久久蜜臀 | 久久久精品国产免大香伊| 欧美亚洲国产精品久久蜜芽| 久久人人爽人人人人爽AV| 国产99久久精品一区二区| 久久无码AV一区二区三区| 国产成人精品久久一区二区三区av | 国产成人精品久久亚洲高清不卡| 2021久久精品免费观看| 久久亚洲国产午夜精品理论片 | 婷婷久久精品国产| 久久精品嫩草影院| 久久国产精品99国产精| 狠狠综合久久综合88亚洲 | 伊人久久大香线焦AV综合影院| 青青草国产精品久久| 国产精品久久久久久福利漫画| 亚洲色婷婷综合久久| 四虎国产精品成人免费久久| 久久久黄片| 久久精品无码一区二区三区免费| 国产精品久久久久天天影视| 久久精品亚洲精品国产色婷| 久久精品无码专区免费东京热 | 久久精品国产亚洲Aⅴ香蕉| 99久久精品国产一区二区蜜芽|