首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络游戏 >

请教为GUI系统所用的纹理开启融合运算,处理透明度,合算么

2012-02-27 
请问为GUI系统所用的纹理开启融合运算,处理透明度,合算么?我的GUI系统所用的纹理用的是PNG的格式,这里就有

请问为GUI系统所用的纹理开启融合运算,处理透明度,合算么?
我的GUI系统所用的纹理用的是PNG的格式,这里就有两个选择
1:创建纹理对象时,使用colorkey来处理透明度
2:开启融合运算,处理PNG图像的透明度。(针对完全透明,即去背景色)

我的问题:
1:如果使用关键色,那图像里有可能存在和关键色一致的有用的像素,若一同被忽视掉,破坏了原图像。
2;如果使用融合运算,这个开销问题呢?可以忽略么??

[解决办法]
colorkey
是什么 不太清楚

不过楼主想要走的 好像不是使用AlphaBlend 是AlphaTest吧
[解决办法]
使用alpha test吧,效果比ColorKey好,灵活,速度比alpha混合快好多。
[解决办法]
D3DRS_ALPHATESTENABLE
[解决办法]
dev->SetRenderState(D3DRS_ALPHAREF, (DWORD)0x00000000);
dev->SetRenderState(D3DRS_ALPHATESTENABLE, TRUE); 
dev->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_GREATEREQUAL);

[解决办法]
alpha test就是说,根据各像素的alpha值来决定是否绘制该像素。
判断条件在d3d里面有这么几种,详细的意义可以参考SDK:
typedef enum D3DCMPFUNC
{
D3DCMP_NEVER = 1,
D3DCMP_LESS = 2,
D3DCMP_EQUAL = 3,
D3DCMP_LESSEQUAL = 4,
D3DCMP_GREATER = 5,
D3DCMP_NOTEQUAL = 6,
D3DCMP_GREATEREQUAL = 7,
D3DCMP_ALWAYS = 8,
D3DCMP_FORCE_DWORD = 0x7fffffff,
} D3DCMPFUNC

也可以在像素着色器里面自己判断。
[解决办法]
比如:
AlphaTestEnable = true;
AlphaFunc=Greater;
AlphaRef=60;
这个设置的意思就是说,像素的alpha值大于60就绘制,否则视为透明的。
[解决办法]
固定管线:
//开启alpha测试
device->SetRenderState(D3DRS_ALPHATESTENABLE, TRUE); 
//选择透明度判断算法,取值为D3DCMPFUNC中的一种,D3DCMP_GREATER表示“alpha值大于参考值则不透明”
device->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_GREATER); 
//设置判断的参考值
device->SetRenderState(D3DRS_ALPHAREF, 0);
 
fx文件中等价的描述:
AlphaTestEnable = true; 
AlphaFunc=Greater; 
AlphaRef=0;
[解决办法]
你的代码是怎样的?
alpha test就这么几句相关内容啊,再不行检测一下显卡是否支持?或者图片的alpha通道是否正常,再或者判断的参考值是不是设置的太低了等等。
D3DCAPS9::AlphaCmpCaps里面是显卡是否支持特定判断算法的信息。

热点排行