gpt4 book ai didi

java - 更新基于图 block 的游戏中的光照

转载 作者:行者123 更新时间:2023-12-01 14:10:22 26 4
gpt4 key购买 nike

我一直在为我正在开发的基于 block 的游戏(想想泰拉瑞亚)开发照明系统,但我对其中的一点感到有点困惑。当一个 block 更新时,它的亮度也会根据其邻近(相邻) block 的亮度进行更新。

现在考虑这种情况:玩家在地上挖了一个洞,将地球深处的一个方 block 暴露在太阳下。这使其亮度级别为 16(共 16 个),其邻居的亮度级别为 15。但是,如果玩家再次填充该孔,则该 block 的亮度级别将保持为 16。我的第一个想法是“审核” “通过检查 block 与相邻 block 的差异不超过一个单位来更新 block 的光照水平,但这被证明是无效的。

我能想到的唯一解决方案是专门检查放置的方 block 是否暴露在阳光下,如果是,则将其下方方 block 的光照级别更新为 16 中的 15。但是,这不会有效在解决某些情况下的问题时,相邻 block 将由于其相邻 block 的原因而无法降低亮度。也许我只需要退后一步,再次审视这个问题,但我想我可以同时在这里发帖。有人对如何解决这个问题有建议吗?

最佳答案

根据我的经验,最不容易出错且(奇怪)最快的方法就是清除可能受影响的最大范围内的所有光 block (在您的情况下为+-16)并重新计算它们。

添加光线时的迭代方法给出了很好的结果,但我发现速度要慢得多;大概是由于在运行算法时维护需要更新和添加/删除的 block 列表的开销。在消除光线时,迭代方法也容易出现错误,因为光线可能会“泄漏回来”,正如您所发现的那样;之前处于 14 光的方 block 失去了与太阳的连接,因此需要重新计算;找到附近的一个光 block 13 并将其自身的光设置为 12(而不是将它们全部设置为零)。

我使用的解决方案是清除所有亮度级别,然后向下扫描;从每个 block 上方的 9 个 block (3D 中,3D 中的 block )收集光线。对于不在正上方的 8 个(或 2D 中的 2 个) block ,光线会衰减,并将光线级别设置为这 9 个 block 中的最大值。这允许光线以最大 45 度角向下传播;这可能会产生相当刺眼的阴影,这可能是也可能不是您想要的。重复向上扫描可以减轻刺眼的阴影,因为无论阳光如何,都可以施加所有 block 都具有的最低光照水平。

关于java - 更新基于图 block 的游戏中的光照,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18563227/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com