Direct9學習之 ------------------- 天空盒

一. 天空盒的應用:
     
      天空盒用於表現遊戲中的天空或者環境。

二. 天空盒基本原理:

      天空盒就是一個包含場景所有元素的長方體盒子,該盒子的六個面附有環境貼圖,所有遊戲行爲均是在盒子中進行,在盒子內看來,附有貼圖的盒子既是整體天空環境。

三. 天空盒實現方式及相關代碼:

由天空盒的基本原理可以將其實現歸納爲以下步驟:
        1. 初始化天空盒長方體並將其放置到場景中
        2. 設置紋理分別渲染長方體各個面(如要繪製動態雲則需每幀改變紋理UV)

        具體相關代碼如下:

        1. 初始化天空盒長方體定點信息

          a. 定義定點格式
            struct SkyboxVertices
           {
              enum
             {
               FVF  = D3DFVF_XYZ |D3DFVF_DIFFUSE| D3DFVF_TEX1,
             };
             VECTOR3  vPos;
             DWORD  nColor;
             float  fu;
             float  fv;
           };


         b. 初始化頂點數據(由於代碼相似,只用一個面代碼做例子)

         m_Verts[TOP][0].vPos = D3DXVECTOR3( - m_fSize/2 ,  + m_fSize/2 ,  -m_fSize/2);m_Verts[TOP][0].fu = 0.0f;m_Verts[TOP][0].fv = 0.0f;m_Verts[TOP][0].nColor = 0xffA283b0;
         m_Verts[TOP][1].vPos = D3DXVECTOR3( + m_fSize/2 ,  + m_fSize/2 ,  -m_fSize/2);m_Verts[TOP][1].fu = 1.0f;m_Verts[TOP][1].fv = 0.0f;m_Verts[TOP][1].nColor = 0xffA283b0;
         m_Verts[TOP][2].vPos = D3DXVECTOR3( - m_fSize/2 ,  + m_fSize/2 ,  +m_fSize/2);m_Verts[TOP][2].fu = 0.0f;m_Verts[TOP][2].fv = 1.0f;m_Verts[TOP][2].nColor = 0xffA283b0;
         m_Verts[TOP][3].vPos = D3DXVECTOR3( + m_fSize/2 ,  + m_fSize/2 ,  +m_fSize/2);m_Verts[TOP][3].fu = 1.0f;m_Verts[TOP][3].fv = 1.0f;m_Verts[TOP][3].nColor = 0xffA283b0;


       2. 設置紋理貼圖繪製天空盒

         pDevice->SetSamplerState( 0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR );
         pDevice->SetSamplerState( 0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR );
         pDevice->SetTexture( 1 , NULL );

         // 渲染
         if ( m_Texture[TOP] )
        {      
           pDevice->SetTexture( 0 , m_Texture[TOP] );
        }
        pDevice->DrawPrimitiveUP( D3DPT_TRIANGLESTRIP , 2 , &m_Verts[TOP] , sizeof(SkyboxVertices) );



四. 效果展示:

                Direct9學習之 ---------------------- 天空盒

                                                              天空盒  

 
            Direct9學習之 ---------------------- 天空盒
 

           UV動畫實現的天空盒


五. 其他:

          關於動態雲的實現方式可用UV動畫實現。
發佈了25 篇原創文章 · 獲贊 2 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章