赞 | 12 |
VIP | 107 |
好人卡 | 6 |
积分 | 4 |
经验 | 31122 |
最后登录 | 2024-6-29 |
在线时间 | 1606 小时 |
Lv2.观梦者 傻♂逼
- 梦石
- 0
- 星屑
- 374
- 在线时间
- 1606 小时
- 注册时间
- 2007-3-13
- 帖子
- 6562
|
本帖最后由 yangff 于 2013-4-5 00:01 编辑
viktor 发表于 2013-4-4 22:43
另外因为我暂时只需要对1个大的Bitmap进行处理,从效率上来说,就按你先前说的,先拷贝过去,再处理,再 ...
我懂了,你的光照是一个窗口大小的bitmap是吧。
很遗憾的告诉你……就算你用了Shader,优化效果不会特别明显(比Ruby肯定快,但是和直接用C操作),而且这种实现其实是有问题的。
首先,你是要计算一个BrightnessMap作为每个像素的亮度,
如果直接
for i in 0...width
for j in 0...height
end
end
的话非常慢(O(N^2))(其实我搞不懂你为什么一定要用模糊)。
另外我也不知道你到底用了什么算法计算:
是根据光源暴力扩展亮度还是根据距离和轮廓线进行计算……
【另外提一点,这里可以用kdtree优化……具体看《计算几何算法与应用》光线采样什么的。。】
但是实际上就算你用了shader……也不能改变内存和显存交换数据的问题……
(如果要做到兰兰所谓的单向,仅仅外包一个dx是不够的)
数据交换还是width*height的……
所以我还是坚持,MMX解决问题……
另外,我不知道你是怎么把光源合成进地图的。
如果是修改地图的亮度,然后把光源用加法合成上去……其实是会出问题的。
不细说,你把全局亮度调到0,然后光源亮度随便给,东西会全部没掉。
不过如果是固定alpha然后修改颜色……虽然可以……但是其实效果比较坑爹。。 |
|