游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3057|回复: 5

关于文字贴图,怎么去背景?

[复制链接]

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2007-1-10 20:29:00 | 显示全部楼层 |阅读模式
这两天在研究文字贴图,很过瘾。
我用点阵字库动态生成了文字贴图,可是背景是黑色的,我想去掉背景,做成公告牌,这样人物头顶上就可以发言了,如果还跟个背景多恶心啊,背景怎么去掉啊?又不能生成dds的alpha通道,怎么去掉黑色背景呢?
还是说要设置混合的参数?又卡住了 [em4]
sf_2007110202928.jpg

6

主题

20

帖子

24

积分

注册会员

Rank: 2

积分
24
发表于 2007-1-10 21:57:00 | 显示全部楼层

Re:关于文字贴图,怎么去背景?

T exture不是有关键色吗?不能用???

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
 楼主| 发表于 2007-1-10 23:11:00 | 显示全部楼层

Re:关于文字贴图,怎么去背景?

D3DXCreateTextureFromFileEx里面到是有 ColorKey可以设置
可是
CreateTexture并没有ColorKey可以设置啊?我用的是CreateTexture动态创建Texture的,怎么搞哦????快急死了,文字贴图搞了我3天了。眼看就要成功了。

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
 楼主| 发表于 2007-1-10 23:37:00 | 显示全部楼层

Re:关于文字贴图,怎么去背景?

终于找到方法了,可是看不懂,效果达到了,也就是给texture设置colorkey,真不明白D3D为什么抛弃了colorkey,难道还有别的方法?


HRESULT D3DUtil_SetColorKey( LPDIRECT3DTEXTURE9 pTexture, DWORD dwColorKey )
{
    // Get colorkey's red, green, and blue components

    DWORD r = ((dwColorKey&0x00ff0000)>>16);
    DWORD g = ((dwColorKey&0x0000ff00)>>8);
    DWORD b = ((dwColorKey&0x000000ff)>>0);

    // Put the colorkey in the texture's native format

    D3DSURFACE_DESC d3dsd;
    pTexture->GetLevelDesc( 0, &d3dsd );
    if( d3dsd.Format == D3DFMT_A4R4G4B4 )
        dwColorKey = 0xf000 + ((r>>4)<<8) + ((g>>4)<<4) + (b>>4);
    else if( d3dsd.Format == D3DFMT_A1R5G5B5 )
        dwColorKey = 0x8000 + ((r>>3)<<10) + ((g>>3)<<5) + (b>>3);
    else if( d3dsd.Format != D3DFMT_A8R8G8B8 )
        return E_FAIL;

    // Lock the texture

    D3DLOCKED_RECT  d3dlr;
    if( FAILED( pTexture->LockRect( 0, &d3dlr, 0, 0 ) ) )
        return E_FAIL;

    // Scan through each pixel, looking for the colorkey to replace

    for( DWORD y=0; y<d3dsd.Height; y++ )
    {
        for( DWORD x=0; x<d3dsd.Width; x++ )
        {
            if( d3dsd.Format==D3DFMT_A8R8G8B8 )
            {
                // Handle 32-bit formats

                if( ((DWORD*)d3dlr.pBits)[d3dsd.Width*y+x] == dwColorKey )
                    ((DWORD*)d3dlr.pBits)[d3dsd.Width*y+x] = 0x00000000;
            }
            else
            {
                // Handle 16-bit formats

                if( ((WORD*)d3dlr.pBits)[d3dsd.Width*y+x] == dwColorKey )
                    ((WORD*)d3dlr.pBits)[d3dsd.Width*y+x] = 0x0000;
            }
        }
    }

    // Unlock the texture and return OK.

    pTexture->UnlockRect(0);
    return S_OK;
}

140

主题

1228

帖子

1233

积分

金牌会员

Rank: 6Rank: 6

积分
1233
QQ
发表于 2007-1-11 00:00:00 | 显示全部楼层

Re:关于文字贴图,怎么去背景?

sherenderstate,用alpha或者colorkey都可以。

18

主题

971

帖子

982

积分

高级会员

Rank: 4

积分
982
发表于 2007-1-11 08:38:00 | 显示全部楼层

Re:关于文字贴图,怎么去背景?

alphaTest或者自己计算colorKey都可以……
MS的DXUT就是自己计算的…强制把COLORKEY区域设为0…
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-26 05:41

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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