游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3904|回复: 4

请问如何在D3D里设置透明色(类似于DirectDraw里的colorkey)

[复制链接]

1

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2006-7-30 20:14:00 | 显示全部楼层 |阅读模式
刚刚从DirectDraw转入D3D,发现D3DXLoadSurfaceFromFile有个参数是D3DCOLOR ColorKey,想用这个来设置透明色,结果在渲染到表面的时候发现想设置透明的地方全部变成了黑色。
载入带有透明区域的png图片,结果在渲染到表面的时候那些本应透明的区域全部变成了白色。

请问这是怎么回事啊,是不是参数设置错误或者漏了什么步骤?知道的大哥稍微点拨一下啊,谢谢了!

1

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2006-7-30 20:19:00 | 显示全部楼层

Re:请问如何在D3D里设置透明色(类似于DirectDraw里的colorkey)

D3DXLoadSurfaceFromFile( Surface,NULL,NULL,"pic.bmp",NULL,D3DX_DEFAULT,D3DCOLOR_ARGB(255,255,0,0),NULL );
载入图片以后,在渲染函数中
D3dDevice->StretchRect( Surface,NULL,BackBuffer,NULL,D3DTEXF_NONE );
发现渲染出来的图片本该变成透明的地方全部变成了黑色!

5

主题

686

帖子

697

积分

高级会员

Rank: 4

积分
697
QQ
发表于 2006-7-31 15:28:00 | 显示全部楼层

Re:请问如何在D3D里设置透明色(类似于DirectDraw里的colorkey)

晕。。。果然是刚从DDRAW转到D3D……D3D里面的绘制操作不要像2D那样直接Get Backbuffer,而是通过Drawprimitive来进行

4

主题

36

帖子

54

积分

注册会员

Rank: 2

积分
54
发表于 2006-7-31 17:44:00 | 显示全部楼层

Re:请问如何在D3D里设置透明色(类似于DirectDraw里的colorkey)

        CGraphics3D::m_lpDDevice9->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
        CGraphics3D::m_lpDDevice9->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
        CGraphics3D::m_lpDDevice9->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
        CGraphics3D::m_lpDDevice9->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);

        CGraphics3D::m_lpDDevice9->SetStreamSource( 0, m_pVB, 0, sizeof(_PLANE2D) );
        CGraphics3D::m_lpDDevice9->SetFVF(D3DFVF_2D);
        CGraphics3D::m_lpDDevice9->SetTexture( 0, m_lpTexture);

        CGraphics3D::m_lpDDevice9->DrawPrimitive(D3DPT_TRIANGLESTRIP,0,2);

渲染的时候设置下状态就OK拉

1

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2006-8-1 13:36:00 | 显示全部楼层

Re:请问如何在D3D里设置透明色(类似于DirectDraw里的colorkey)

哦,好的,感谢楼上两位。我再试试看
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-25 01:23

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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