游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2577|回复: 6

请教三层纹理混合问题

[复制链接]

11

主题

27

帖子

27

积分

注册会员

Rank: 2

积分
27
发表于 2010-9-24 01:36:00 | 显示全部楼层 |阅读模式
地形中需要加入光照图,现在需要混合三层纹理,地形纹理、细节纹理、光照纹理,没添加光照之前地形显示还是好的,但是添加上光照纹理后,天空盒和海水都受到光照纹理的影响了,混合代码如下:
//设置纹理融合
//设置地形基本纹理
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); //线性最小滤波



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

3

主题

53

帖子

104

积分

注册会员

Rank: 2

积分
104
发表于 2010-9-25 10:01:00 | 显示全部楼层

Re:请教三层纹理混合问题

未设置m_pDevice->SetTexture( 2, NULL),所以第三层贴图继续使用m_Light.m_pLightTex

11

主题

27

帖子

27

积分

注册会员

Rank: 2

积分
27
 楼主| 发表于 2010-9-26 23:23:00 | 显示全部楼层

Re:请教三层纹理混合问题

谢谢指教啊··被这个问题困扰好多次了

0

主题

4

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2010-10-6 18:59:00 | 显示全部楼层

Re:请教三层纹理混合问题

没明白,m_pDevice->SetTexture( 2, NULL),
设置NULL的话,第三层纹理的效果岂不是没有了

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2010-10-9 10:05:00 | 显示全部楼层

Re:请教三层纹理混合问题

都什么年代了,用shader吧

10

主题

55

帖子

55

积分

注册会员

Rank: 2

积分
55
发表于 2010-10-9 12:32:00 | 显示全部楼层

Re:请教三层纹理混合问题

2L正解

11

主题

27

帖子

27

积分

注册会员

Rank: 2

积分
27
 楼主| 发表于 2010-10-9 23:27:00 | 显示全部楼层

Re:请教三层纹理混合问题

后来发现是天空盒和海水纹理的渲染没设置融合标志,分别设了
m_pDevice->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
m_pDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
就没事了。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-6 15:12

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表