|
|
发表于 2007-8-31 23:30:00
|
显示全部楼层
Re:如何使用多重纹理进行地形渲染?急!
两层纹理加alpha混合,固定管线的,这是过去写的渲染部分的代码片段 :
//多重纹理alpha混合制作地形贴图平滑过渡的效果
m_pDevice->SetTexture(0, m_pTex1); //设置帖图0
m_pDevice->SetTexture(1, m_pTex2); //设置帖图1
m_pDevice->SetTextureStageState( 0, D3DTSS_TEXCOORDINDEX, tex_coord ); //设置顶点纹理坐标(u,v)采用第0组,细节纹理
//_device->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE );
m_pDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
//_device->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE );
m_pDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1); //直接选择第一层纹理作为运算结果
//_device->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
/////------------------------------------------------------------------------
m_pDevice->SetTextureStageState( 1, D3DTSS_TEXCOORDINDEX, tex_coord ); //第二层纹理也采用第一组贴图坐标, 细节纹理
m_pDevice->SetTextureStageState(1, D3DTSS_COLORARG1, D3DTA_TEXTURE ); //第二层纹理作为参数1
m_pDevice->SetTextureStageState( 1, D3DTSS_COLORARG2, D3DTA_CURRENT ); //上次运算完成的结果,实际上就是第一层纹理,作为参数2
m_pDevice->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_BLENDDIFFUSEALPHA ); //两层纹理按照Arg1*(Alpha) + Arg2*(1-Alpha) 进行混合
//_device->SetTextureStageState( 2, D3DTSS_ALPHAOP, D3DTOP_DISABLE );
//_device->SetTextureStageState( 2, D3DTSS_COLOROP, D3DTOP_DISABLE );
//两层纹理都需要设置纹理的线性贴图方式,采用抗锯齿方式,才能比较平滑
m_pDevice->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
m_pDevice->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
m_pDevice->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_POINT);
m_pDevice->SetSamplerState(1, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
m_pDevice->SetSamplerState(1, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
m_pDevice->SetSamplerState(1, D3DSAMP_MIPFILTER, D3DTEXF_POINT); |
|