游戏开发论坛

 找回密码
 立即注册
搜索
查看: 9264|回复: 25

关于多重纹理混合的问题

[复制链接]

7

主题

23

帖子

23

积分

注册会员

Rank: 2

积分
23
发表于 2008-7-3 15:43:00 | 显示全部楼层 |阅读模式
  我想用固定管线实现多层纹理的叠加显示,已经实现了两张纹理的叠加,但是一超过3张就什么都显示不出来,请问是什么原因呢?下面是我的代码。请多多指教 !
      
            g_pd3dDevice->SetTexture(0 , g_pTexture);
            g_pd3dDevice->SetTexture(1 , g_pTexture1);
            g_pd3dDevice->SetTexture(2 , g_pTexture2);
            g_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
            g_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE );
            g_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_CURRENT );
            g_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE );
            g_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1 );

            g_pd3dDevice->SetTextureStageState( 1, D3DTSS_COLORARG1, D3DTA_TEXTURE );
            g_pd3dDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_ADD);
            g_pd3dDevice->SetTextureStageState( 1, D3DTSS_COLORARG2, D3DTA_CURRENT   );

            g_pd3dDevice->SetTextureStageState( 2, D3DTSS_COLORARG1, D3DTA_TEXTURE );
            g_pd3dDevice->SetTextureStageState( 2, D3DTSS_COLOROP,D3DTOP_MODULATE );
            g_pd3dDevice->SetTextureStageState( 2, D3DTSS_COLORARG2, D3DTA_CURRENT );

35

主题

1735

帖子

1739

积分

金牌会员

Rank: 6Rank: 6

积分
1739
QQ
发表于 2008-7-4 08:18:00 | 显示全部楼层

Re:关于多重纹理混合的问题

你的显卡只支持2层混合。

7

主题

23

帖子

23

积分

注册会员

Rank: 2

积分
23
 楼主| 发表于 2008-7-4 09:53:00 | 显示全部楼层

Re: 关于多重纹理混合的问题

  谢谢!
  我的显卡是 NVIDIA GeForce4 MX 440的。  如果是因为显卡不支持两重以上的纹理混合,是不是就不能用固定管线实现多重纹理呢?请问能不能用REF的运行模式来观看运行结果?

35

主题

1735

帖子

1739

积分

金牌会员

Rank: 6Rank: 6

积分
1739
QQ
发表于 2008-7-4 16:14:00 | 显示全部楼层

Re:关于多重纹理混合的问题

超过2个纹理混合只能多遍渲染了,MU就是这么干的!

2

主题

132

帖子

132

积分

注册会员

Rank: 2

积分
132
发表于 2008-7-4 23:38:00 | 显示全部楼层

Re:关于多重纹理混合的问题

不是显卡的问题, Geforce4 MX 440 是支持8层纹理混合的,是你其他地方的问题。

35

主题

1735

帖子

1739

积分

金牌会员

Rank: 6Rank: 6

积分
1739
QQ
发表于 2008-7-5 09:10:00 | 显示全部楼层

Re: Re:关于多重纹理混合的问题

Fenger: Re:关于多重纹理混合的问题

不是显卡的问题, Geforce4 MX 440 是支持8层纹理混合的,是你其他地方的问题。

LS兄台显然没搞清楚8层纹理混合的真正含义,所谓的8层纹理混合只是DX所提供的特性,但是你的显卡并不一定支持这一特性,你可以调用DX设备检查函数来检查一下,你会发现其中有两个参数:一个是纹理混合数,这个参数在DX9中通常为8,就是说该DX9支持8层纹理混合,还有一个参数是纹理最大混合数,不同的硬件中这个参数不一样,对于老显卡来说通常为2,就表示你的显卡最多支持2层纹理混合。我的台式机的显卡与LZ是一样的,我也曾经遇到过LZ的问题,所以我对此问题颇有研究,嘿嘿.... [em22]

7

主题

23

帖子

23

积分

注册会员

Rank: 2

积分
23
 楼主| 发表于 2008-7-5 10:37:00 | 显示全部楼层

Re: 关于多重纹理混合的问题

    谢谢楼上的两位,如果我的显卡不支持8重纹理混合,但是我需要使用很多层纹理,而且我不想使用多次渲染,因为那样效率太低,我想尽可能减少几何顶点的渲染次数,请问有没有什么方法可以解决这个问题呢?

35

主题

1735

帖子

1739

积分

金牌会员

Rank: 6Rank: 6

积分
1739
QQ
发表于 2008-7-5 11:20:00 | 显示全部楼层

Re:关于多重纹理混合的问题

办法倒是有一个,就是不知道你是否囊中羞涩,嘿嘿——换显卡。改用可编程管线呗,嘿嘿。。。 [em13]

2

主题

132

帖子

132

积分

注册会员

Rank: 2

积分
132
发表于 2008-7-5 13:02:00 | 显示全部楼层

Re:关于多重纹理混合的问题

GF4 440MX 真的是支持8层纹理混合啊,虽然我不是那个显卡,但是我找那个显卡用DX Caps Viewer看过的:
                  DeviceType                                        1
                  AdapterOrdinal
                  MaxTextureWidth                                   2,048
                  MaxTextureHeight                                  2,048
                  MaxVolumeExtent
                  MaxTextureRepeat                                  8,192
                  MaxTextureAspectRatio                             2,048
                  MaxAnisotropy                                     2
                  MaxVertexW                                        1E+010
                  GuardBandLeft                                     -1E+008
                  GuardBandTop                                      -1E+008
                  GuardBandRight                                    1E+008
                  GuardBandBottom                                   1E+008
                  ExtentsAdjust                                     0
                  MaxTextureBlendStages                             8
那个MaxTextureBlendStage就是8。不是么?

2

主题

132

帖子

132

积分

注册会员

Rank: 2

积分
132
发表于 2008-7-5 13:08:00 | 显示全部楼层

Re:关于多重纹理混合的问题

哦,好像是我搞错了。。那个标志不是那个意思。
                  MaxTextureBlendStages                             8
                  MaxSimultaneousTextures                           2
这两个标志有点不一样。。应该是下面那个标志才对
MaxTextureBlendStages
Maximum number of texture-blending stages supported in the fixed function pipeline. This value is the number of blenders available.

MaxSimultaneousTextures
Maximum number of textures that can be simultaneously bound to the fixed-function pipeline sampler stages. If the same texture is bound to two sampler stages, it counts as two textures.

但是用shader的话,gf4 mx440是不支持的。。。。混合3层纹理是有些麻烦。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-21 23:58

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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