|
最近做地形,在没添加海水之前还算正常,但是添加海水后却出现了问题。我的细节纹理是这样设置的
//设置地形基本纹理
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_ALPHAOP, D3DTOP_DISABLE);//禁止Alpha通道混合
m_pDevice->SetTexture( 1, m_pDetailTex);
m_pDevice->SetTextureStageState( 1, D3DTSS_TEXCOORDINDEX, 1);//1层纹理使用第1组纹理坐标
m_pDevice->SetTextureStageState( 1, D3DTSS_COLORARG1, D3DTA_TEXTURE);//设置ARG1 = 当前1层纹理颜色
m_pDevice->SetTextureStageState( 1, D3DTSS_COLORARG2, D3DTA_CURRENT);//设置ARG2 = 上层纹理颜色
m_pDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_MODULATE2X);//将颜色相乘 ARG1 * ARG2
m_pDevice->SetTextureStageState( 1, D3DTSS_ALPHAOP, D3DTOP_DISABLE);//禁止Alpha通道混合
效果正常

然后我的海水纹理设置如下
//禁用背面消除(因为海水应该是上下都可见的)
m_pDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
//设置漫反射来源
m_pDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
m_pDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
m_pDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE);//将海水纹理乘以漫反射值后输出
m_pDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_DIFFUSE);//选择漫反射值作为Alpha运算来源
m_pDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
//设置
m_pDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);//源纹理融合系数
m_pDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);//目标纹理融合系数
//开启融合状态
m_pDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, true);
m_pDevice->SetTexture( 0, m_pWaterTex);//设置纹理
hr = m_pDevice->DrawIndexedPrimitive(……); //绘制海水
//关闭融合状态
m_pDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, false);
结果是海水出来了。。但是地形却挨染色了、、、、请问是哪里设置错了吗???我怀疑是SetTexture()搞错了。。求高人指点啊。。。感激不尽。。。
 |
|