Questions tagged «space-partitioning»

6
如何优化Minecraft风格的体素世界?
我发现即使使用四核和多肉的显卡,《我的世界》奇妙的大世界也极难导航。 我认为Minecraft的运行缓慢来自: Java,因为空间分区和内存管理在本机C ++中更快。 弱世界分区。 两种假设我都可能错了。但是,这让我开始思考管理大型体素世界的最佳方法。由于这是一个真实的3D世界,其中块可以在世界的任何部分存在,它基本上是一个大的3D阵列[x][y][z],其中在世界的每个块具有类型(即BlockType.Empty = 0,BlockType.Dirt = 1等) 我认为要使这种世界表现良好,您需要: 使用某种树(oct / kd / bsp)将所有多维数据集拆分出来;似乎oct / kd会是更好的选择,因为您可以仅在每个多维数据集级别而不是每个三角形级别进行分区。 使用某种算法来确定当前可以看到哪些块,因为距离用户最近的块可能会混淆后面的块,从而使其变得毫无意义。 保持块对象本身轻巧,因此可以快速将其从树中添加和删除。 我想对此没有正确的答案,但是我很想看到人们对此问题的看法。 在大型体素世界中,您将如何提高性能?

1
将多个矩形“修复”为较少数量的矩形的算法?
假设我有一个不同形状和颜色的矩形网格,我想减少(合理地接近最佳值就可以了,不需要最佳值)代表相同颜色布局的矩形数。 上图是一个非常简化的情况,矩形之间的空白仅用于可视化-它们实际上是紧密包装的。 可以帮助我做到这一点的方法或算法名称(对Google满意)是什么?

1
什么是kd树相交逻辑?
我试图弄清楚如何实现KD树。 在Ericson的“实时冲突检测”的第322页上 如果Google图书预览在您单击链接时看不到它,则下面包含文本部分 文字部分 相关部分: 将光线或直线段与kd树相交的基本原理很简单。将该线与节点的分割平面相交,并计算相交的t值。如果t在直线的区间内,即0 <= t <= tmax,则直线横跨平面,并且树的两个子级都递归下降。如果不是,则仅递归访问包含片段原点的一侧。 所以这就是我所拥有的:(如果看不到字母,请在新标签页中打开图像) 逻辑树 在这里,橙色射线穿过3d场景。x代表与平面的交点。从左侧,射线击中: 场景的封闭立方体的正面, (1)分裂平面 (2.2)分割平面 场景的封闭立方体的右侧 但是,天真地遵循了上面的Ericson的基本描述,这就是会发生的事情: 针对分裂平面(1)进行测试。射线束照射到分裂平面(1),因此下一个测试中将包含分裂平面(1)的左右子级。 针对分裂平面(2.1)进行测试。雷实际上击中了那架飞机(向右偏),所以两个孩子都被包括在下一级别的测试中。(这是违反直觉的-在后续测试中不应仅包括底部节点) 有人可以描述橙色光线正确穿过场景时会发生什么吗?

2
轴对齐空间划分:将空间划分为随机矩形吗?
我需要一种将3d空间划分为随机轴对齐的盒子形状的方法。目前,我目前正在划分2d空间用于测试目的。我想到的最直接的方法是定义一个大小为(1,1)的矩形,然后将所有现有矩形递归地分成两个在X轴和Y轴之间交替的不平坦矩形。 这里的问题很明显。这种方法会导致拉伸线变长(以红色标记) 我想要的是更自然的外观(我提供了一个示例) 看,从上到下或从左到右没有长的直线。 唯一的限制是我可能希望限制矩形的最小大小,而不影响大小的粒度。也就是说,如果最小的rect是1平方厘米,而不是秒,则最小的房间不应是2平方单位。 因此,理想情况下,算法应满足以下三个约束: 矩形不是无限小。 矩形尺寸不是最小矩形尺寸的离散乘积。也就是说,如果最小的rect是3平方单位,则不将较大的rect约束为6、9、12等正方形单位,因此可以是3.2或4.7。 该算法以多项式时间运行(需要快速计算)。

1
多人空间分割的有效解决方案?
这个问题有点棘手,但我会尽力弄清楚。 可以说我正在构建一个在线游戏(不是MMO规模),但是通过权威的服务器方法可以支持尽可能多的玩家。我想真正的大与世界很多 AI模拟敌人。 我知道一些通过细分空间而不处理不需要处理的东西来节省服务器CPU的策略。我已经按地区划分了世界,这需要加载时间和较小的过渡时间,我认为这对于保持本地(单独或什至有几个朋友)玩游戏时的游戏质量至关重要。我不希望球员出现在一个或两个以上的地区。 问题在于,一个区域可能会变得很大,并且一次模拟了很多NPC。在不影响玩家体验的情况下如何处理?表格中没有像每个区域一台服务器之类的方法。 我主要是在寻找能够容纳成群的敌人,甚至是和平的NPC的数据结构。要最终确定问题,请注意,由于存在车辆,因此车辆在某个区域内的行驶速度相当快,会影响“何时”驶向剔除区域。

2
世界界限-(0,大小)或(-HalfSize,HalfSize)?
创建在其中移动,绘制和碰撞对象的游戏空间时,最好将(0,0)点或(0,0,0)点放在空间的正中心,这样世界的界限是(-halfSize,halfSize),还是最好将它放在空间的最远角落,所以界限是(0,size)? 每种方案的利弊分别是什么?还是真的没关系吗? 看来这只是次要的细节,但我想看看是否存在我可能忽略的重大问题。
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.