Questions tagged «recursion»

4
如何在Minecraft风格的游戏中实现具有遮挡的基于体素的照明?
我正在使用C#和XNA。我当前的照明算法是一种递归方法。但是,这样做很昂贵,以至于每5秒计算一个8x128x8块。 还有其他照明方法会产生可变暗度阴影吗? 还是递归方法好,也许我只是做错了? 似乎递归的东西从根本上来说是昂贵的(每个块被迫遍历约25k块)。我当时正在考虑使用一种类似于光线跟踪的方法,但是我不知道这将如何工作。我尝试的另一件事是将光源存储在一个列表中,并为每个块获取到每个光源的距离,并使用该光源将其照亮到正确的水平,但随后照明将穿过墙壁。 我当前的递归代码如下。在清除并重新添加阳光和手电筒之后,从不具有零光照水平的块中的任何位置调用此方法。 world.get___at是一个可以在该块之外获取块的函数(该块位于块类内部)。Location是我自己的结构,类似于Vector3,但是使用整数而不是浮点值。light[,,]是该块的光照图。 private void recursiveLight(int x, int y, int z, byte lightLevel) { Location loc = new Location(x + chunkx * 8, y, z + chunky * 8); if (world.getBlockAt(loc).BlockData.isSolid) return; lightLevel--; if (world.getLightAt(loc) >= lightLevel || lightLevel <= 0) return; if (y < 0 || …

2
如何有效地确定基于3D体素的房间是否密封
我一直无法有效地确定大型房间是否封闭在基于体素的3D房间中,因此遇到了一些问题。我正在尽最大努力在不寻求帮助的情况下解决问题,但还没有尽力放弃,所以我在寻求帮助。 为了澄清起见,密封是房间内没有孔。有氧气密封器,用于检查房间是否密封,并根据氧气输入水平进行密封。 现在,这就是我的操作方式: 从封口砖上方的块开始(通风口在封口的顶面上),递归遍历所有6个相邻方向 如果相邻的图块是完整的非真空图块,请继续执行循环 如果相邻的块未满,或者是真空块,则递归检查其相邻块是否存在。 每次检查图块时,递减计数器 如果计数为零,则最后一个块与真空砖相邻,则返回该区域未密封 如果计数为零,并且最后一个块不是真空块,或者递归循环在计数器为零之前结束(没有真空块),则该区域将被密封 如果该区域未被密封,请进行一些更改以再次运行循环: 检查相邻块中的“透气”砖块而不是真空砖块 代替使用减量计数器,直到发现没有相邻的“透气空气”砖块为止。 循环完成后,将每个选中的块设置为真空砖。 这是我正在使用的代码:http : //pastebin.com/NimyKncC 问题: 我每3秒运行一次此检查,有时一个封闭程序必须循环遍历数百个块,并且在一个拥有很多氧气封闭程序的广阔世界中,每隔几秒钟的这些多个递归循环在CPU上可能很难。 我想知道是否有人在优化方面有更多经验可以帮助我,或者至少可以指出正确的方向。谢谢你
10 java  voxels  recursion 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.