|
地形中需要加入光照图,现在需要混合三层纹理,地形纹理、细节纹理、光照纹理,没添加光照之前地形显示还是好的,但是添加上光照纹理后,天空盒和海水都受到光照纹理的影响了,混合代码如下:
//设置纹理融合
//设置地形基本纹理
m_pDevice->SetTexture( 0, m_TerrainTex.m_pTerrainTex);
m_pDevice->SetTextureStageState( 0, D3DTSS_TEXCOORDINDEX, 0);//0层纹理使用第0组纹理坐标
m_pDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE);//设置ARG1 = 当前0层纹理颜色
m_pDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
m_pDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_DISABLE);//禁止Alpha通道混合
//抗锯齿滤波处理
m_pDevice->SetSamplerState( 0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR); //线性最大滤波
m_pDevice->SetSamplerState( 0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR); //线性最小滤波
//设置细节纹理
m_pDevice->SetTexture( 1, m_TerrainTex.m_pDetailTex);
m_pDevice->SetTextureStageState( 1, D3DTSS_TEXCOORDINDEX, 1);//1层纹理使用第1组纹理坐标
m_pDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_MODULATE2X);//1层纹理混合方式=ARG1 * ARG2
m_pDevice->SetTextureStageState( 1, D3DTSS_COLORARG1, D3DTA_TEXTURE);//设置ARG1 = 当前1层纹理颜色
m_pDevice->SetTextureStageState( 1, D3DTSS_COLORARG2, D3DTA_CURRENT);//设置ARG2 = 上层纹理混合后的颜色
m_pDevice->SetTextureStageState( 1, D3DTSS_ALPHAOP, D3DTOP_DISABLE);//禁止Alpha通道混合
//抗锯齿滤波处理
m_pDevice->SetSamplerState( 1, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR); //线性最大滤波
m_pDevice->SetSamplerState( 1, D3DSAMP_MINFILTER, D3DTEXF_LINEAR); //线性最小滤波
//设置光照纹理
m_pDevice->SetTexture( 2, m_Light.m_pLightTex);
m_pDevice->SetTextureStageState( 2, D3DTSS_TEXCOORDINDEX, 0);//2层纹理使用第0组纹理坐标
m_pDevice->SetTextureStageState( 2, D3DTSS_COLOROP, D3DTOP_MODULATE);//2层纹理混合方式=ARG1 * ARG2
m_pDevice->SetTextureStageState( 2, D3DTSS_COLORARG1, D3DTA_TEXTURE);//设置ARG1 = 当前1层纹理颜色
m_pDevice->SetTextureStageState( 2, D3DTSS_COLORARG2, D3DTA_CURRENT);//设置ARG2 = 上层纹理混合后的颜色
m_pDevice->SetTextureStageState( 2, D3DTSS_ALPHAOP, D3DTOP_DISABLE);//禁止Alpha通道混合
//抗锯齿滤波处理
m_pDevice->SetSamplerState( 2, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR); //线性最大滤波
m_pDevice->SetSamplerState( 2, D3DSAMP_MINFILTER, D3DTEXF_LINEAR); //线性最小滤波

这是没滤波之前的图,主要问题是为什么会影响到了天空盒和海水的纹理呢。。。请高人指教 |
|