游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2837|回复: 7

请问在D3D9中,如何实现,两个纹理的融合.

[复制链接]

11

主题

43

帖子

49

积分

注册会员

Rank: 2

积分
49
发表于 2006-5-10 19:06:00 | 显示全部楼层 |阅读模式
我现在设置状态如下:想实现pTexture1,与pTexture2进行透明显示,即1为前景,2为背景,

#define SetTextureColor( dev, i, arg1, op, arg2 ) {dev->SetTextureStageState( i, D3DTSS_COLOROP, op);dev->SetTextureStageState( i, D3DTSS_COLORARG1, arg1 );dev->SetTextureStageState( i, D3DTSS_COLORARG2, arg2 );}


hr |= m_pD3DDevice->SetTexture(0,pTexture1);
hr |= m_pD3DDevice->SetTexture(1,pTexture2);

       
hr |= m_pD3DDevice->SetRenderState(D3DRS_ALPHABLENDENABLE,TRUE);
                hr |= m_pD3DDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
                hr |= m_pD3DDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);

hr |= m_pD3DDevice->SetTextureStageState(0,D3DTSS_ALPHAOP,D3DTOP_MODULATE);

SetTextureColor( m_pD3DDevice, 0, D3DTOP_MODULATE, D3DTA_TEXTURE, D3DTA_DIFFUSE );
hr |= m_pD3DDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);

问题:
但现在,不能够实现透明显示,只显示为黑色,如果不设置SetTextureColor,则可以显示pTexture1.
不知道如何设置它们的透明度,或者透明颜色(比如指定黑色为透明)

请高手指教,谢谢!

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2006-5-10 20:00:00 | 显示全部楼层

Re:请问在D3D9中,如何实现,两个纹理的融合.

SetTextureColor( m_pD3DDevice, 0, D3DTOP_MODULATE, D3DTA_TEXTURE, D3DTA_DIFFUSE );
改成
SetTextureColor( m_pD3DDevice, 0,  D3DTA_TEXTURE, D3DTOP_MODULATE, D3DTA_DIFFUSE );

11

主题

43

帖子

49

积分

注册会员

Rank: 2

积分
49
 楼主| 发表于 2006-5-11 10:17:00 | 显示全部楼层

Re:请问在D3D9中,如何实现,两个纹理的融合.

多谢congy,是我自己太粗心了.但是改后,还是不能够实现前景透明.请问如何设置colorkey,即纹理的透明色,和透明度?谢谢!

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2006-5-11 23:19:00 | 显示全部楼层

Re:请问在D3D9中,如何实现,两个纹理的融合.

你在加载纹理的时候指定 colorkey.

11

主题

43

帖子

49

积分

注册会员

Rank: 2

积分
49
 楼主| 发表于 2006-5-12 10:18:00 | 显示全部楼层

Re:请问在D3D9中,如何实现,两个纹理的融合.

多谢congy,透明色,及透明度,我利用A8R8G8B8格式的纹理即可以实现了.但是现在问题是:

如何对多纹理的合成,比如
我有纹理1: pTexture1, 及纹理2: pTexture2,

hr |= m_pD3DDevice->SetTexture(0,pTexture1);
hr |= m_pD3DDevice->SetTexture(1,pTexture2);

设置到D3D设备中,
然后怎么设置,才能够实现,pTexture1作为前景,pTexture2作为背景呢?

我现在这样设置后,则只能够显示pTexture1,pTexture2不显示.即不起作用.,只显示整个场景的背景,即:

hr = m_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,
                                  m_d3dcolorBackground, 1.0f, 0 );

清屏后,d3dcolorBackground,变量指定的颜色.

谢谢!

11

主题

43

帖子

49

积分

注册会员

Rank: 2

积分
49
 楼主| 发表于 2006-5-15 14:32:00 | 显示全部楼层

Re:请问在D3D9中,如何实现,两个纹理的融合.

up!

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2006-5-15 16:50:00 | 显示全部楼层

Re:请问在D3D9中,如何实现,两个纹理的融合.

d3d 的例子中有纹理混合的例子。找找看吧。

11

主题

43

帖子

49

积分

注册会员

Rank: 2

积分
49
 楼主| 发表于 2006-5-15 17:52:00 | 显示全部楼层

Re:请问在D3D9中,如何实现,两个纹理的融合.

谢谢!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-24 12:54

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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