游戏开发论坛

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

加载纹理的一个函数

[复制链接]

36

主题

107

帖子

107

积分

注册会员

Rank: 2

积分
107
发表于 2007-11-23 17:52:00 | 显示全部楼层 |阅读模式
HRESULT WINAPI D3DXCreateTextureFromFileEx(          LPDIRECT3DDEVICE9 pDevice,
    LPCTSTR pSrcFile,
    UINT Width,
    UINT Height,
    UINT MipLevels,
    DWORD Usage,
    D3DFORMAT Format,
    D3DPOOL Pool,
    DWORD Filter,
    DWORD MipFilter,
    D3DCOLOR ColorKey,
    D3DXIMAGE_INFO *pSrcInfo,
    PALETTEENTRY *pPalette,
    LPDIRECT3DTEXTURE9 *ppTexture
);

在这个函数中ColorKey是如何影响纹理的象素值啊?当我 ColorKey = 0xFFFFFFFF ;时,
纹理中的象素piexl = ColorKey 是这个样子被改变,还是怎么成线型那样被改变啊

36

主题

107

帖子

107

积分

注册会员

Rank: 2

积分
107
 楼主| 发表于 2007-11-26 09:22:00 | 显示全部楼层

Re:加载纹理的一个函数

请指导一下吧?扔块转头也好啊

5

主题

755

帖子

757

积分

高级会员

Rank: 4

积分
757
发表于 2007-11-26 10:25:00 | 显示全部楼层

Re:加载纹理的一个函数

我没看懂你在问什么。colorkey是已经过时的东西。能不用就别用了。原理很简单。就是如果那个piexl的值==你给定的colorkey就透明

36

主题

107

帖子

107

积分

注册会员

Rank: 2

积分
107
 楼主| 发表于 2007-11-26 10:37:00 | 显示全部楼层

Re:加载纹理的一个函数

当 ColorKey = 0xFFFFFF00  与ColorKey = 0xFFFFFFFF 区别是什么啊?

还有ColorKey 过时了的话,现在用什么技术啊?

5

主题

755

帖子

757

积分

高级会员

Rank: 4

积分
757
发表于 2007-11-26 17:25:00 | 显示全部楼层

Re:加载纹理的一个函数

用带通道的贴图或者你自己alpha test blend啊  0xffffffff是白色 0xffffff00 是黄色

36

主题

107

帖子

107

积分

注册会员

Rank: 2

积分
107
 楼主| 发表于 2007-11-26 18:50:00 | 显示全部楼层

Re:加载纹理的一个函数

if (FAILED(D3DXCreateTextureFromFileEx(m_pD3DDevice,
                                                   "..\\media\\Back.bmp",
                                                                                   0, 0, 0, 0, D3DFMT_A8R8G8B8,
                                                                                   D3DPOOL_MANAGED, D3DX_DEFAULT,
                                                                                   D3DX_DEFAULT, 0xFFFFFFFF,
                                                                                   NULL, NULL,
                                                                                   &m_pBackTexture)))
                return FALSE;
        LPDIRECT3DSURFACE8 pWorkSurface;
       
        m_pBackTexture->GetSurfaceLevel(0 ,&pWorkSurface );

        D3DSURFACE_DESC LevelDescription;
        m_pBackTexture->GetLevelDesc(0, &LevelDescription);

        D3DLOCKED_RECT     WorkRect;

        pWorkSurface->LockRect(&WorkRect, NULL, 0);

        BYTE* piel;
        for (long Row = 0; Row < LevelDescription.Height; Row++)
        {               
                for (int i = 0; i < LevelDescription.Width; i++)
                {
                        piel = (BYTE *)WorkRect.pBits + i + (Row * WorkRect.Pitch);
                        if ( *piel > 0)
                        {
                                break;

                    }
                }
        }
0xffffffff是白色 0xffffff00 是黄色 这个我知道,我想问一下,他们这个样子设置后,对我的材质里面的象素的
影响有什么不一样吗? 上面是我测试不同的ColorKey 对我材质中象素的影响,但是没发现什么规律,请指导?

36

主题

107

帖子

107

积分

注册会员

Rank: 2

积分
107
 楼主| 发表于 2007-11-27 09:34:00 | 显示全部楼层

Re:加载纹理的一个函数

D3DCOLOR ARGB 值是Direct3D 8里一个基本的色彩格式,其中alpha值占的字节比较重,它用值255(0xFF)表示不透明,0表示完全透明。由于目前最常用的Color Key是Source color key(源图像被指定Color Key值),这被实现为,在D3DXCreateTextureFromFileEx()会询问一个ColorKey值,然后在图像中搜索,并且把这个值替换成D3DCOLOR的0x00000000(透明黑)。所以如果你的源图像使用黑色作为Color Key,指定Color Key为0xFF000000(不透明黑),然后传送这个文件,D3DX将使得所有黑色的像素变成透明。许多开发者都喜欢使用洋红色来代替黑色,这个色彩的值为0xFFFF00FF,接着DirectX将在做关键色处理的时候用洋红色来代替黑色做透明。指定关键色为0将禁止图象做任何透明绘制。

36

主题

107

帖子

107

积分

注册会员

Rank: 2

积分
107
 楼主| 发表于 2007-11-27 10:38:00 | 显示全部楼层

Re:加载纹理的一个函数

如果源图像使用黑色作为Color Key,指定Color Key为0xFF000000(不透明黑),然后传送这个文件,D3DX将使得所有黑色的像素变成透明,那么原图象除了黑象素之外的象素,它们的透明度如何啊?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-17 18:18

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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