游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4236|回复: 10

D3DXSPRITE怎么淡入淡出?

[复制链接]

15

主题

38

帖子

38

积分

注册会员

Rank: 2

积分
38
发表于 2011-2-19 22:29:00 | 显示全部楼层 |阅读模式
我倒是搜索到一个相关的帖子,但是仍然有问题。。。

淡入淡出是靠透明度来调节的吧?

render代码

//-----------------------------------------------------------------------------
// Name: Render()
// Desc: Draws the scene
//-----------------------------------------------------------------------------
void Render()
{
        // Clear the backbuffer to a blue color
        g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );
g_pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);                //打开alpha混合

g_pd3dDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);        //设置alpha混合方式

g_pd3dDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);

        RECT rct = {0,0,512,512};
        // Begin the scene
        if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
        {
                if ( SUCCEEDED( g_pSprite->Begin(D3DXSPRITE_ALPHABLEND) ) )
                {
                        g_pSprite->Draw(g_pTexture, &rct, NULL, &D3DXVECTOR3(100,100,0), 0x2FFFFFFF);
                        g_pSprite->End();
                }
                if ( SUCCEEDED( g_pSprite2->Begin(D3DXSPRITE_ALPHABLEND) ) )
                {
                        g_pSprite2->Draw(g_pTexture2, &rct, NULL, &D3DXVECTOR3(0,0,1), 0x2FFFFFFF);
                        g_pSprite2->End();
                }
                // End the scene
                g_pd3dDevice->EndScene();
        }
        // Present the backbuffer contents to the display
        g_pd3dDevice-&gtresent( NULL, NULL, NULL, NULL );
}

我开了深度缓冲,可以通过Z来调节哪张图显示在上面,那哪图显示在下面。我想给精灵做一个透明度,思路就是ID3DXSPRITE::draw(*pTexture,&rect,&D3DVECTOR3(center),&D3DVECTOR3(position),color0xffffffff)  最后的这个颜色的参数,我把alpha换成2f让精灵透明。。就是0x2fffffff,也确实图片有透明的感觉的了,但实质还是不透明的啊,半透明的话,那么应该能够透过上层图片看到底下图片才对啊?怎么能让他真的透明,能透过上层的半透明的图片精灵,看到下层的图片精灵?

86

主题

2251

帖子

2384

积分

金牌会员

Rank: 6Rank: 6

积分
2384
QQ
发表于 2011-2-19 23:51:00 | 显示全部楼层

Re:D3DXSPRITE怎么淡入淡出?

靠顶点颜色决定吧 白到黑

15

主题

38

帖子

38

积分

注册会员

Rank: 2

积分
38
 楼主| 发表于 2011-2-20 08:57:00 | 显示全部楼层

Re:D3DXSPRITE怎么淡入淡出?

没明白。。。D3DXSPRITE怎么弄顶点颜色?

26

主题

417

帖子

476

积分

中级会员

总版主

Rank: 3Rank: 3

积分
476
发表于 2011-2-20 10:46:00 | 显示全部楼层

Re:D3DXSPRITE怎么淡入淡出?

虽然你使用0x2f的alpha,但需要检查你的RenderState里的AlphaBlend是否开启,另外需要检查SRC_BLEND和DEST_BLEND参数是不是正确的

15

主题

38

帖子

38

积分

注册会员

Rank: 2

积分
38
 楼主| 发表于 2011-2-20 13:29:00 | 显示全部楼层

Re:D3DXSPRITE怎么淡入淡出?

可是我有这几行代码啊?

g_pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);                //打开alpha混合

g_pd3dDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);        //设置alpha混合方式

g_pd3dDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);

26

主题

417

帖子

476

积分

中级会员

总版主

Rank: 3Rank: 3

积分
476
发表于 2011-2-20 14:17:00 | 显示全部楼层

Re:D3DXSPRITE怎么淡入淡出?

你试试0x2f2f2f2f看看

15

主题

38

帖子

38

积分

注册会员

Rank: 2

积分
38
 楼主| 发表于 2011-2-20 18:55:00 | 显示全部楼层

Re:D3DXSPRITE怎么淡入淡出?

致使两个精灵变得更暗了啊?

67

主题

390

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
发表于 2011-2-21 10:04:00 | 显示全部楼层

Re:D3DXSPRITE怎么淡入淡出?

如果你使用顶点+IDirect3DTextexture9的话,可以参考:
http://topic.csdn.net/u/20100913/00/9b6c07fc-db34-4814-8978-fa372a4e8e57.html

不过好像D3DXSPRITE也可以做到,甚至更方便.你可以用上面一些设置试一下

86

主题

2251

帖子

2384

积分

金牌会员

Rank: 6Rank: 6

积分
2384
QQ
发表于 2011-2-21 21:24:00 | 显示全部楼层

Re:D3DXSPRITE怎么淡入淡出?

淡入淡出最好用颜色而不是ALPHA值来实现,除非你的背景是一张图。
g_pSprite->Draw(g_pTexture, &rct, NULL, &D3DXVECTOR3(100,100,0), D3DCOLOR_RGBA(255,255,255,255));//白
g_pSprite->Draw(g_pTexture, &rct, NULL, &D3DXVECTOR3(100,100,0), D3DCOLOR_RGBA(0,0,0,255));//黑
你只要在画图时,把RGB三个值向0减即可。

另外,半透明和Z缓冲是冲突的。你得不到想要的效果,大概就是这个原因造成的。

33

主题

159

帖子

272

积分

中级会员

Rank: 3Rank: 3

积分
272
QQ
发表于 2011-2-26 21:29:00 | 显示全部楼层

Re:D3DXSPRITE怎么淡入淡出?

AlphaBland太可怕了,顺序不对直接会把背景色秀给你看的.感觉还是Post,浪费一次render
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-6 14:28

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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