游戏开发论坛

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: gzz100

如何使用多重纹理进行地形渲染?急!

[复制链接]

18

主题

971

帖子

982

积分

高级会员

Rank: 4

积分
982
发表于 2007-8-31 00:00:00 | 显示全部楼层

Re:如何使用多重纹理进行地形渲染?急!

这个用MultiPASS和Multitexture应该差别不大。楼主要DX的还是OGL的代码?

19

主题

42

帖子

44

积分

注册会员

Rank: 2

积分
44
 楼主| 发表于 2007-8-31 10:17:00 | 显示全部楼层

Re:如何使用多重纹理进行地形渲染?急!

我要Dx的~谢谢了~~mail:h186@sohu.com

32

主题

108

帖子

108

积分

注册会员

Rank: 2

积分
108
发表于 2007-8-31 17:22:00 | 显示全部楼层

Re:如何使用多重纹理进行地形渲染?急!

也发给我一个吧.我要opengl的代码,谢谢
iron1982@yeah.net

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 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);

25

主题

82

帖子

82

积分

注册会员

Rank: 2

积分
82
发表于 2007-9-1 13:51:00 | 显示全部楼层

Re:如何使用多重纹理进行地形渲染?急!

如果是三张纹理呢? 怎么混?(两张地形纹理+一张地形黑白图)

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2007-9-1 14:57:00 | 显示全部楼层

Re: Re:如何使用多重纹理进行地形渲染?急!

whb9633: Re:如何使用多重纹理进行地形渲染?急!

这个用MultiPASS和Multitexture应该差别不大。楼主要DX的还是OGL的代码?


这个差别很大吧.....
MultiPASS中每个pass都需要重新处理一遍顶点

http://www.moon-labs.com/ml_resources.htm

Basic Terrain Rendering Part II

18

主题

971

帖子

982

积分

高级会员

Rank: 4

积分
982
发表于 2007-9-1 17:55:00 | 显示全部楼层

Re:如何使用多重纹理进行地形渲染?急!

……测试表明在一般机器上mt和MP性能相差不远,标准的多PASS会处理多遍顶点,但可以优化到只处理一遍,且多纹理有显卡限制。楼上发了代码,就不再发了。

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2007-9-1 19:48:00 | 显示全部楼层

Re: Re:如何使用多重纹理进行地形渲染?急!

zakker: Re:如何使用多重纹理进行地形渲染?急!

如果是三张纹理呢? 怎么混?(两张地形纹理+一张地形黑白图)


黑白图,事先需要读入到顶点色的AGRB 的alpha通道里面去
另外两张图就用这个通道来混了。

另:
固管功能很有限,混不出多张的效果(也许是我还没想到)
如果是多张图用shader吧。

我看过 用shader实现的“三通道二元插值” 法,能支持6层纹理的混合,几乎足够用了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-25 02:44

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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