游戏开发论坛

 找回密码
 立即注册
搜索
查看: 6870|回复: 14

我用纹理的方法在D3D中贴图,请问应该怎样去掉关键色呢?

[复制链接]

13

主题

44

帖子

44

积分

注册会员

Rank: 2

积分
44
发表于 2003-10-16 16:49:00 | 显示全部楼层 |阅读模式
我把一张图片用纹理的方法贴在一个矩形上,
但是我要把图片中的一种颜色(象DirectDraw)去掉...
应该怎样处理?
或者是否还有别的更好办法在D3D中贴图片?

1万

主题

1万

帖子

2万

积分

管理员

中级会员

Rank: 9Rank: 9Rank: 9

积分
20737
发表于 2003-10-16 17:15:00 | 显示全部楼层

Re:我用纹理的方法在D3D中贴图,请问应该怎样去掉关键色呢?

用alpha通道,d3d好像已经没有colorkey的概念。

13

主题

44

帖子

44

积分

注册会员

Rank: 2

积分
44
 楼主| 发表于 2003-10-21 10:18:00 | 显示全部楼层

Re:我用纹理的方法在D3D中贴图,请问应该怎样去掉关键色呢?

谢谢,请问具体怎样做呢?

1万

主题

1万

帖子

2万

积分

管理员

中级会员

Rank: 9Rank: 9Rank: 9

积分
20737
发表于 2003-10-21 10:29:00 | 显示全部楼层

Re:我用纹理的方法在D3D中贴图,请问应该怎样去掉关键色呢?

我记得D3DX里好像在载入图像的时候可以设置Colorkey,当然,这个设置ColorKey实际上是把相应颜色的地方改为Alpha不可见。

13

主题

44

帖子

44

积分

注册会员

Rank: 2

积分
44
 楼主| 发表于 2003-10-21 11:54:00 | 显示全部楼层

Re:我用纹理的方法在D3D中贴图,请问应该怎样去掉关键色呢?

DX9文档中说的我不是很理解,照着做也不成功
======================================
ColorKey
[in] D3DCOLOR value to replace with transparent black, or 0 to disable the colorkey. This is always a 32-bit ARGB color, independent of the source image format. Alpha is significant and should usually be set to FF for opaque color keys. Thus, for opaque black, the value would be equal to 0xFF000000.
(设为0就禁止了colorkey,这个值经常被设置成为FF为了不透明一个颜色,比如说,为了让黑色不透明,值就设为0xFF000000)
=====================================
而现在我要的是让一个颜色全透明(不可见),例如黑色,那就应该设为0x00000000,但按文档的意思就是禁止了颜色键....
郁闷+吐血ing....大侠救我

13

主题

44

帖子

44

积分

注册会员

Rank: 2

积分
44
 楼主| 发表于 2003-10-21 12:04:00 | 显示全部楼层

Re:我用纹理的方法在D3D中贴图,请问应该怎样去掉关键色呢?

        hr=D3DXCreateTextureFromFileEx(lpD3DDevice,strFileName,
                D3DX_DEFAULT,D3DX_DEFAULT,1,0,fd3dFormat,nFlag,
                D3DX_FILTER_NONE,D3DX_FILTER_NONE,dwColorKey,
                &d3dImgInfo,NULL,&m_pd3dTexture);
        CHECKERROR(hr,"D3DXCreateTextureFromFileEx");
我在这儿设置好colorkey...
然后用alpha testing把alpha值小于1的全滤掉
m_pd3dDevice->SetRenderState(D3DRS_ALPHAREF, (DWORD)0x00000001);
m_pd3dDevice->SetRenderState(D3DRS_ALPHATESTENABLE, TRUE);
m_pd3dDevice->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_GREATEREQUAL);
不知道是不是下面的操作有误,反正不成功...
我也试过alpha混合,那就使整张图片变成半透明了

2

主题

106

帖子

114

积分

注册会员

Rank: 2

积分
114
QQ
发表于 2003-10-21 13:23:00 | 显示全部楼层

Re:我用纹理的方法在D3D中贴图,请问应该怎样去掉关键色呢?

楼主上面这样是错的。
D3D中现在只有LPD3DXSPRITE才支持colorkey。如果不用LPD3DXSPRITE::draw()函数是画不出想要的透明效果的。
alpha test的意思是把带alpha通道的图片中alpha值小于某个值的颜色完全变透明,要想半透明必须用带alpha通道的图片,然后用alpha blend。bmp图片是不带alpha通道的,只有tga、png这样的图片才有。

13

主题

44

帖子

44

积分

注册会员

Rank: 2

积分
44
 楼主| 发表于 2003-10-21 15:07:00 | 显示全部楼层

Re:我用纹理的方法在D3D中贴图,请问应该怎样去掉关键色呢?

研究了一上微软那个关于公告牌的例子,
他们用的是一种dds文件,就是一张图片再另一张alpha通道合成的
然后alpha testing上去的

用colorkey确实是行的,我的一本参考书就讲到了,但仅仅讲几个字而已

13

主题

44

帖子

44

积分

注册会员

Rank: 2

积分
44
 楼主| 发表于 2003-10-22 16:54:00 | 显示全部楼层

Re:我用纹理的方法在D3D中贴图,请问应该怎样去掉关键色呢?

终于用colorkey搞定
原来只能用D3DFMT_A1R5G5B5
我一直用的是D3DFMT_R5G6B5
具体原因不知道,
请大虾们分析一下

13

主题

44

帖子

44

积分

注册会员

Rank: 2

积分
44
 楼主| 发表于 2003-10-22 16:55:00 | 显示全部楼层

Re:我用纹理的方法在D3D中贴图,请问应该怎样去掉关键色呢?

害我浪费N天的时间,发了N个贴,郁闷呀....
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-23 10:43

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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