我试着将角色混合到游戏中,但我仍然不能去掉雪碧片中的蓝色,并发现雪碧的白色区域是半透明的。
在此之前,颜色D3DCOLOR_XRGB(255, 255, 255)
设置为D3DXCreateTextureFromFileEx
。你会看到火球穿过精灵。
在我将颜色更改为D3DCOLOR_XRGB(0, 255, 255)
后,结果将是
现在,我正在尝试删除雪碧片的蓝色,我的预期结果是这样的。
到现在为止,我还是想不出该怎么做。有什么想法吗?
void initPlayer()
{
// Create texture.
hr = D3DXCreateTextureFromFileEx(d3dDevice, "player.png", 169, 44,
D3DX_DEFAULT, NULL, D3DFMT_A8R8G8B8, D3DPOOL_MANAGED,
D3DX_DEFAULT, D3DX_DEFAULT, D3DCOLOR_XRGB(0, 255, 255),
NULL, NULL, &player);
}
void renderPlayer()
{
sprite->Draw(player, &playerRect, NULL, &D3DXVECTOR3(playerDest.X, playerDest.Y, 0),D3DCOLOR_XRGB(255, 255, 255));
}
void initFireball()
{
hr = D3DXCreateTextureFromFileEx(d3dDevice, "fireball.png", 512, 512,
D3DX_DEFAULT, NULL, D3DFMT_A8R8G8B8, D3DPOOL_MANAGED,
D3DX_DEFAULT, D3DX_DEFAULT, D3DCOLOR_XRGB(255, 255, 255),
NULL, NULL, &fireball);
}
void renderFireball()
{
sprite->Draw(fireball, &fireballRect, NULL, &D3DXVECTOR3(fireballDest.X, fireballDest.Y, 0), D3DCOLOR_XRGB(255,255, 255));
}
发布于 2013-06-30 03:38:51
你有四个选择。首先,编辑图像并使背景透明。这是“最正确”的长期解决方案。
第二,在创建纹理之前,在加载时转换背景颜色。循环所有像素,并将其设置为指定颜色的0 alpha。您可以根据加载的方式更改图像格式。
第三,在GPU上运行时执行此操作。加载图像,绑定相同大小的渲染目标,然后使用着色器改变与背景颜色匹配的源像素。可能比使用CPU更快,也可能不快。
最后,最坏的选择,只需做这个“随需”与着色器和不麻烦存储结果。
发布于 2013-06-29 13:09:58
我已经很久没有使用DirectX 9了,但下面是我对它的看法。你会想的,首先:
对于混合状态,您可能需要查看:
http://msdn.microsoft.com/en-us/library/windows/desktop/bb172252(v=vs.85).aspx
粗略地看一下,我认为D3DBLEND_SRCCOLOR可能就是你要找的东西。
https://gamedev.stackexchange.com/questions/58302
复制相似问题