对于游戏,我正在尝试计算光线和阴影。为此,我将画布分解为方形区域并计算,如果在从玩家到每个方形位置的途中光线被阻挡。我现在已经成功地为这些计算达到了相当不错的表现。
然后通过用黑色方块(Canvas.fillRect(...)
)覆盖不可见区域来显示结果,但是当想要一个好的分辨率,即用于计算的~10'000个方格时,该步骤变得太昂贵。我试图首先将它们渲染到离屏画布(=缓冲区),然后在我的可见画布上绘制缓冲区,但我无法体验到任何显着的性能提升。
是否有我遗漏的东西,或者是否有其他方法来加强绘图?
更新
可以在此处找到受影响的代码:https://github.com/otruffer/Ape_On_Tape/blob/master/src/client/js/visibility.js(代码有点太大,无法在此处发布)
实际绘图发生在此文件下半部分的drawCloudAt(...)
和flushBuffer()
。
答案 0 :(得分:1)
在软件中进行实时灯光计算始终是性能杀手。您是否考虑使用真正的3D引擎代替在视频卡上进行光照计算?是的,Javascript现在可以做到 - 这个新功能称为WebGL。
如果您只需要更快的方式来应用光照贴图,则可以直接操作画布的RGB值,而不是使用fillRect。您可以使用getImageData获取画布的原始8位RGBA值数组。然后,您可以操作此数组并使用putImageData将其放回。