mutitouch:多层纹理混合 Muti_Texture Blend



  Muti Texture可以实现些奇妙效果:如果动态光影效果这些效果甚至连动态光照都无法作到眩目图象例如涟漪水波或者场景墙壁特殊光照效果模拟 
  比如个墙壁贴图,我们想在上面作出些特殊光影效果但是这些效果用光照基本上无法实现或者很难做到其实根本也没必要这样只要掌握了多层纹理混合原理再加上你足够想象力和不断尝试很可能作出意想不到效果其实大部分花样能够都玩在和原来墙壁texture混合那层textuer上我们可以不断动态改变这层纹理纹理坐标或者不断替换这层纹理就可能出现奇妙效果


定义FVF和顶点格式
# D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE|D3DFVF_TEX2)

struct CUSTOMVERTEX
{
    D3DXVECTOR3 position; // The position
    D3DCOLOR color; // The color
    FLOAT tu, tv; // The texture coordinates
    FLOAT tu2, tv2;
};



设置TextureStageState:
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE );
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE );
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE );
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1 );

m_pd3dDevice->SetTextureStageState( 1, D3DTSS_COLORARG1, D3DTA_TEXTURE );
m_pd3dDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_ADD);//MODULATE2X );
m_pd3dDevice->SetTextureStageState( 1, D3DTSS_COLORARG2, D3DTA_CURRENT );


动态改变第 2层贴图坐标

CUSTOMVERTEX* pVertices;

( FAILED( g_pVB->Lock( 0, 0, (BYTE**)&pVertices, 0 ) ) )
     E_FAIL;

for( DWORD i=0; i<100; i )
{
    FLOAT theta = (2*D3DX_PI*i)/(100-1);

    // pVertices[2*i+0].position = D3DXVECTOR3( sinf(theta),-1.0f, cosf(theta) );
    // pVertices[2*i+0].color = 0xffffffff;
    // pVertices[2*i+0].tu = ((FLOAT)i)/(100-1);
    // pVertices[2*i+0].tv = 1.0f;
    pVertices[2*i+0].tu = fTexTimeKey/40+((FLOAT)i)/(100-1);
    // pVertices[2*i+0].tv2 = 1.0f;

    // pVertices[2*i+1].position = D3DXVECTOR3( sinf(theta), 1.0f, cosf(theta) );
    // pVertices[2*i+1].color = 0xff808080;
    // pVertices[2*i+1].color = 0xffffffff;
    // pVertices[2*i+1].tu = ((FLOAT)i)/(100-1);
    // pVertices[2*i+1].tv = 0.0f;
    pVertices[2*i+1].tu = fTexTimeKey/40+((FLOAT)i)/(100-1);
    // pVertices[2*i+1].tv2 = 0.0f;

}
g_pVB->Unlock;

有些显卡不支持多层纹理但是大部分显卡应该支持至少两层Texture吧这是我在很古老TNT显卡贴图效果按此在新窗口浏览图片500)this.width=500\" src=/upload/article/a2005110900020934.g>
按此在新窗口浏览图片500)this.width=500\" src=/upload/article/2005110900025320.g>
按此在新窗口浏览图片500)this.width=500\" src=/upload/article/2005110900032261.g>
Tags:  texture riccardomuti mutimedia mutitouch

延伸阅读

最新评论

发表评论