好吧。首先让它工作,然后让它好。这不是一个说法吗?我不喜欢这个说法。我希望它从一开始就好。这次尝试也没能在第一次就成功,但是似乎有些东西正在起作用。
你看到的这里是Unity中的我的节点编辑器中的精确布尔运算的实现。它们已经足够准确了,能让我放心下手去处理下一个节点了。花了大约一周的时间来找bug:我找到了自己之前造成布尔运算失效和失去紧密性的一些傻瓜式错误。还有一些问题需要解决,但是我需要休息几周了,我已经违反了自己的计划了。所以是精确的,但现在它们的速度令人无法原谅。
我的“Native Detail Mesh”基于浮点数,这增加了当数据在两个地方之间移动时,可能的退化点的数量会合并在一起。平面上的mesh存在很明显的问题。另外,我的交点候选计算仍然很低效。由于我是基于多边形的,所以不需要在“树”中存储三角形并在候选中运行三角化阶段。至少能超越CGAL并将一些部分转移到多线程中会很好,但是之前我需要完成其他操作符:我仍然没有实现Text,Extrude,或者旋转节点。一个不折不扣的节点编辑器怎么能忽略这些呢?
无论如何,这是一个伟大的调试周。
测试一:地形切割。223个连续的切割球体从一个盒子中减去(这很重要,而且很难)。按照测试规则,最后的体积必须是0.5477,而不能失去第四位小数位。我的结果是0.54771。很开心。
测试二:连续10个胶囊切割。看起来很简单,但是很危险:如果你的拓扑结构堆积了一堆丑陋的三角形,胶囊首先会建立这个三角形堆栈,然后又会穿过它。这个测试我很喜欢。实际上这是我开始的地方,也是第一个测试,之前调试都被它打破了。
测试三:一个通过球体和环形球体的连续切割。这个测试很容易通过。似乎主要是测试了前交点计算。这个测试我没什么问题。
测试四:一个很有趣的测试。首先,我们在一个棋盘样式的模式中组装立方体,然后使用布尔减法将它们分开。经过修复了测试一和测试二暴露的bug后,我在第一次尝试就通过了这个测试。很高兴。
基准测试作者:Solidean的创作者。
评论 (0)