|
|
看了这里的一篇文章
http://www.gamedev.net/community/forums/topic.asp?topic_id=442138
里面提到一个算法:
float4 encode(float fDist)
{
const float4 bitSh = float4( 256*256*256, 256*256, 256, 1);
const float4 bitMsk = float4( 0, 1.0/256.0, 1.0/256.0, 1.0/256.0);
float4 comp;
comp = fDist * bitSh;
comp = frac(comp);
comp -= comp.xxyz * bitMsk;
return comp;
}
float decode(sampler ShadowMapS, float2 texcood)
{
float4 vec = tex2D(ShadowMapS, texcood);
const float4 bitShifts = float4(1.0/(256.0*256.0*256.0), 1.0/(256.0*256.0), 1.0/256.0, 1);
return dot(vec.xyzw , bitShifts);
}
我试过了,是可以的,已经能从实现 float<-> A8R8G8B8互转了
comp -= comp.xxyz * bitMsk;
可是这句话实在是看不懂,我想损失末尾1.0/(256.0*256.0*256.0)的精度加入alpha信息,不知道怎么加?
试了很久也没试出来,那位高手知道的可否指教 |
|