青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

天行健 君子當自強而不息

DXUT源碼分析 ---- 類CDXUTMesh(5)

最后一類是渲染函數,類CDXUTMesh重載了兩個渲染函數Render(),其作用都是用來渲染當前的網格模型。所不同的是,第一個函數用在固定函數流水線中,第二個函數用在可編程流水線技術中,這兩個函數的最后兩個參數用于指定是否渲染網格模型中的不透明和半透明部分。

首先來看第一個Render()函數:

HRESULT CDXUTMesh::Render( LPDIRECT3DDEVICE9 pd3dDevice, bool bDrawOpaqueSubsets, bool bDrawAlphaSubsets )
{
    
if( NULL == m_pMesh )
        
return E_FAIL;

    
// Frist, draw the subsets without alpha
    if( bDrawOpaqueSubsets )
    {
        
for( DWORD i=0; i<m_dwNumMaterials; i++ )
        {
            
if( m_bUseMaterials )
            {
                
if( m_pMaterials[i].Diffuse.a < 1.0f )
                    
continue;

                pd3dDevice
->SetMaterial( &m_pMaterials[i] );
                pd3dDevice
->SetTexture( 0, m_pTextures[i] );
            }

            m_pMesh
->DrawSubset( i );
        }
    }

    
// Then, draw the subsets with alpha
    if( bDrawAlphaSubsets && m_bUseMaterials )
    {
        
for( DWORD i=0; i<m_dwNumMaterials; i++ )
        {
            
if( m_pMaterials[i].Diffuse.a == 1.0f )
                
continue;

            
// Set the material and texture
            pd3dDevice->SetMaterial( &m_pMaterials[i] );
            pd3dDevice
->SetTexture( 0, m_pTextures[i] );
            m_pMesh
->DrawSubset( i );
        }
    }

    
return S_OK;
}

 

代碼簡潔明了,首先繪制不透明的網格(alpha == 1.0f),接著繪制半透明的網格(alpha != 1.0f)。

 

接著來看第二個Render()函數:

HRESULT CDXUTMesh::Render( ID3DXEffect *pEffect,
                           D3DXHANDLE hTexture,  D3DXHANDLE hDiffuse,  D3DXHANDLE hAmbient,
                           D3DXHANDLE hSpecular, D3DXHANDLE hEmissive, D3DXHANDLE hPower,
                           
bool bDrawOpaqueSubsets, bool bDrawAlphaSubsets )
{
    
if( NULL == m_pMesh )
        
return E_FAIL;

    UINT cPasses;

    
// Frist, draw the subsets without alpha
    if( bDrawOpaqueSubsets )
    {
        pEffect
->Begin( &cPasses, 0 );

        
for( UINT p = 0; p < cPasses; ++p )
        {
            pEffect
->BeginPass( p );

            
for( DWORD i=0; i<m_dwNumMaterials; i++ )
            {
                
if( m_bUseMaterials )
                {
                    
if( m_pMaterials[i].Diffuse.a < 1.0f )
                        
continue;

                    
if( hTexture )
                        pEffect
->SetTexture( hTexture, m_pTextures[i] );

                    
// D3DCOLORVALUE and D3DXVECTOR4 are data-wise identical.
                    
// No conversion is needed.

                    
if( hDiffuse )
                        pEffect
->SetVector( hDiffuse, (D3DXVECTOR4*)&m_pMaterials[i].Diffuse );

                    
if( hAmbient )
                        pEffect
->SetVector( hAmbient, (D3DXVECTOR4*)&m_pMaterials[i].Ambient );

                    
if( hSpecular )
                        pEffect
->SetVector( hSpecular, (D3DXVECTOR4*)&m_pMaterials[i].Specular );

                    
if( hEmissive )
                        pEffect
->SetVector( hEmissive, (D3DXVECTOR4*)&m_pMaterials[i].Emissive );

                    
if( hPower )
                        pEffect
->SetFloat( hPower, m_pMaterials[i].Power );

                    pEffect
->CommitChanges();
                }

                m_pMesh
->DrawSubset( i );
            }

            pEffect
->EndPass();
        }

        pEffect
->End();
    }

    
// Then, draw the subsets with alpha
    if( bDrawAlphaSubsets )
    {
        pEffect
->Begin( &cPasses, 0 );

        
for( UINT p = 0; p < cPasses; ++p )
        {
            pEffect
->BeginPass( p );

            
for( DWORD i=0; i<m_dwNumMaterials; i++ )
            {
                
if( m_bUseMaterials )
                {
                    
if( m_pMaterials[i].Diffuse.a == 1.0f )
                        
continue;

                    
if( hTexture )
                        pEffect
->SetTexture( hTexture, m_pTextures[i] );

                    
// D3DCOLORVALUE and D3DXVECTOR4 are data-wise identical.
                    
// No conversion is needed.

                    
if( hDiffuse )
                        pEffect
->SetVector( hDiffuse, (D3DXVECTOR4*)&m_pMaterials[i].Diffuse );

                    
if( hAmbient )
                        pEffect
->SetVector( hAmbient, (D3DXVECTOR4*)&m_pMaterials[i].Ambient );

                    
if( hSpecular )
                        pEffect
->SetVector( hSpecular, (D3DXVECTOR4*)&m_pMaterials[i].Specular );

                    
if( hEmissive )
                        pEffect
->SetVector( hEmissive, (D3DXVECTOR4*)&m_pMaterials[i].Emissive );

                    
if( hPower )
                        pEffect
->SetFloat( hPower, m_pMaterials[i].Power );

                    pEffect
->CommitChanges();
                }

                m_pMesh
->DrawSubset( i );
            }

            pEffect
->EndPass();
        }

        pEffect
->End();
    }

    
return S_OK;
}

 

代碼也是相當簡潔明了,首先繪制不透明網格,接著繪制半透明網格。在繪制時遍歷所有的通道,并設置紋理,材質的漫反射光、環境光、鏡面反射光、自發光、鏡面反射光指數。

posted on 2008-05-31 11:36 lovedday 閱讀(519) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


公告

導航

統計

常用鏈接

隨筆分類(178)

3D游戲編程相關鏈接

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美午夜片欧美片在线观看| 另类酷文…触手系列精品集v1小说| 国产精品男女猛烈高潮激情| 欧美视频在线观看 亚洲欧| 欧美另类久久久品| 欧美亚洲在线播放| 亚洲欧美一区二区三区在线| 欧美一二三视频| 老司机一区二区三区| 欧美激情中文字幕乱码免费| 亚洲欧洲另类国产综合| 99国产精品视频免费观看一公开| 亚洲一级在线观看| 久久久人成影片一区二区三区观看 | 久久久久一区二区三区| 国产精品日韩欧美综合| 国产精品系列在线| 黄色在线一区| 亚洲午夜高清视频| 久久人人精品| 亚洲精品看片| 久久国产精品色婷婷| 欧美日韩国产精品一卡| 一区二区三区在线高清| 亚洲精品乱码| 亚洲欧美日韩精品久久久| 亚洲欧美日本伦理| 一本久道久久综合婷婷鲸鱼| 卡一卡二国产精品| 久久精品亚洲一区二区三区浴池| 欧美黄色小视频| 亚洲视频精品| 欧美大片免费| 激情久久久久| 亚洲一区二区三区在线| 欧美电影免费观看网站| 99精品国产福利在线观看免费| 久久精品一区二区三区中文字幕 | 老司机aⅴ在线精品导航| 亚洲精选视频在线| 久久亚洲精品视频| 国产亚洲激情在线| 韩国一区二区三区在线观看| 欧美日韩国产一区| 亚洲人成在线播放网站岛国| 亚洲片在线资源| 亚洲一二三区视频在线观看| 亚洲激情一区| 国产精品久久久久影院色老大| 亚洲永久字幕| 欧美亚洲一区三区| 亚洲毛片在线看| 亚洲午夜精品视频| 国产日韩精品久久久| 久久美女性网| 麻豆精品精品国产自在97香蕉| 美女视频黄 久久| 国产精品chinese| 先锋影院在线亚洲| 国产精品福利网站| 亚洲一区二区三区精品动漫| 亚洲精品一区久久久久久| 欧美www视频在线观看| 亚洲国产婷婷综合在线精品 | 久久免费观看视频| 先锋影音一区二区三区| 国产亚洲欧美日韩在线一区| 欧美在线网站| 久久久久久9| 亚洲国产欧美一区二区三区同亚洲| 欧美 日韩 国产一区二区在线视频| 久久亚洲综合网| 亚洲精品国精品久久99热一| 亚洲欧洲在线播放| 国产精品国产一区二区| 久久国产欧美精品| 裸体歌舞表演一区二区| 一区二区日本视频| 午夜精品亚洲| 91久久精品日日躁夜夜躁国产| 亚洲精品免费一区二区三区| 国产精品伦子伦免费视频| 久久字幕精品一区| 欧美日韩成人在线观看| 欧美尤物巨大精品爽| 麻豆精品精品国产自在97香蕉| 一本色道婷婷久久欧美| 午夜精彩国产免费不卡不顿大片| 狠狠久久婷婷| 日韩亚洲不卡在线| 激情懂色av一区av二区av| 亚洲日本va午夜在线影院| 国产欧美一区二区三区在线老狼| 亚洲成色精品| 国产色产综合色产在线视频| 亚洲夫妻自拍| 国产亚洲精品久| 亚洲麻豆一区| 伊人久久婷婷| 亚洲在线一区| 亚洲精品影视| 久久精品日韩| 欧美在线啊v| 欧美日韩综合在线| 欧美黑人国产人伦爽爽爽| 国产精品入口夜色视频大尺度| 欧美激情在线狂野欧美精品| 国内精品久久久久影院薰衣草| 亚洲伦理精品| 亚洲精品国精品久久99热一| 久久精品国产77777蜜臀| 亚洲欧美日韩精品久久亚洲区| 欧美gay视频| 美女精品在线| 国内精品久久久久影院优| 亚洲女人天堂av| 亚洲国产欧美不卡在线观看| 午夜精品亚洲| 香蕉免费一区二区三区在线观看| 日韩亚洲国产欧美| 美玉足脚交一区二区三区图片| 久久福利毛片| 国产日韩欧美自拍| 亚洲在线1234| 亚洲欧美国产不卡| 国产精品国内视频| 中国成人亚色综合网站| 亚洲网站在线播放| 欧美揉bbbbb揉bbbbb| 亚洲理论在线观看| 一区二区精品国产| 欧美日韩在线高清| 一区二区激情小说| 亚洲一区在线观看视频| 国产精品成人一区二区艾草| 一区二区三区四区五区视频| 正在播放亚洲| 欧美视频网站| 亚洲女同精品视频| 久久久久久久久综合| 樱桃国产成人精品视频| 久久深夜福利| 亚洲黄一区二区| 亚洲一区二区伦理| 国产日韩欧美精品综合| 久久精品九九| 亚洲欧洲日本一区二区三区| 国产精品99久久99久久久二8 | 欧美亚洲在线| 久久夜色精品国产欧美乱极品| 伊人春色精品| 欧美成人久久| 一区二区三区四区五区在线| 久久精品国产久精国产思思| 亚洲国产精品成人| 欧美日韩精品一二三区| 亚洲在线中文字幕| 老司机亚洲精品| 一区二区三区av| 国产亚洲一区二区精品| 久久噜噜噜精品国产亚洲综合| 亚洲国产天堂久久国产91| 亚洲欧美一区二区三区在线| 国产有码在线一区二区视频| 免播放器亚洲| 亚洲一区二区三区成人在线视频精品 | 国产欧美一区二区三区在线看蜜臀 | 久久人体大胆视频| 日韩视频在线播放| 久久综合九色综合欧美就去吻| 亚洲精品欧洲| 国产欧美日韩综合一区在线观看| 久久久综合精品| 一区二区三区|亚洲午夜| 老司机免费视频一区二区三区| 中文精品视频一区二区在线观看| 国产日韩欧美91| 午夜久久久久久久久久一区二区| 欧美偷拍一区二区| 久久av免费一区| 日韩午夜精品视频| 久久综合激情| 欧美在线视频一区| 亚洲看片免费| 尤妮丝一区二区裸体视频| 国产精品欧美风情| 欧美国产亚洲精品久久久8v| 久久久99国产精品免费| 亚洲夜晚福利在线观看| 最新高清无码专区| 欧美国产日本高清在线| 久久精品欧美| 香蕉久久一区二区不卡无毒影院 | 亚洲激情不卡| 国内综合精品午夜久久资源| 国产精品一区=区| 欧美视频一区二区| 欧美日韩精品久久| 欧美日本精品一区二区三区| 久久资源av|