游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2150|回复: 1

float 与 A8R8G8B8的转换,不太明白,知道的请进

[复制链接]

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2008-5-27 13:57:00 | 显示全部楼层 |阅读模式
看了这里的一篇文章
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信息,不知道怎么加?
试了很久也没试出来,那位高手知道的可否指教

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
 楼主| 发表于 2008-5-27 14:59:00 | 显示全部楼层

Re: float 与 A8R8G8B8的转换,不太明白,知道的请进

穿透alpha贴图的shadowmap终于搞定了,唉,看似简单,其实也不容易啊。
用到的压缩算法,效率似乎高一点,但没感觉得出来
不管怎么样,发图出来纪念一下
sf_200852714599.jpg
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-22 09:25

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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