2

我有一个我的主角的精灵。我通常用 ARGB(255,255,255,255) 的颜色模数绘制它。但是,我希望我的精灵画得更白。我可以通过改变颜色模数使精灵被绘制成任何颜色,除了白色。我能做些什么?我使用 C++ 和 DirectX9 并使用 LPD3DXSPRITE 来绘制我的纹理。

4

2 回答 2

1

我知道有两种方法,一种低效,一种更有效:

效率低下)使用 alphablending 绘制另一个半透明的白色精灵。

高效)使用着色器绘制四边形。(一个简单的着色器,在纹理样本的实际返回值上添加一个值,而不是相乘)

于 2010-01-02T16:28:52.083 回答
1

尝试这个:

IDirect3DDevice9* device = your_device;
LPD3DXSPRITE sprite = your_sprite;
LPDIRECT3DTEXTURE9 texture = your_texture;
D3DXVECTOR3 center;
D3DXVECTOR3 position;
unsigned char c = how_white_you_want;


sprite->Begin(D3DXSPRITE_ALPHABLEND);

device->SetTextureStageState( 0, D3DTSS_COLOROP,   D3DTOP_ADD );
device->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
device->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE );

sprite->Draw(texture, NULL, &center, &sprite, D3DCOLOR_RGBA(c,c,c,255));

sprite->End();

我认为它简单而有效。

于 2010-08-21T05:04:25.307 回答