前段时间也不断的在网络上搜索开源的3D布尔运算库,当时觉得比较满意的是GTS(GNU Triangulated Surface Library),花了很长时间解决了VS2005下面的编译问题,然后又花了一些时间来理解“古怪”的C的“面向对象”。
昨天将GTS和OpenSceneGraph进行了结合,可以在两种格式中相互转换,GTS负责布尔运算,OpenSceneGraph进行显示。昨天初步实验结果还算满意,各种布尔运算都很正常。
且看下图,展示的是一个圆柱形的刀具和一个长方体进行布尔运算的结果。
下一步工作就是让这些布尔操作能够连续进行,以便可以仿真道具在模型上面进行切削的过程。然而,GTS库终于在这时候“崩溃”了。布尔运算会产生大量的细小的三角形,然而当刀具移动一个小距离的时候,GTS无法处理很多细小三角形之间的布尔运算问题,导致了GTS内的断言失败!后来在GTS的邮件列表里面查看,然而查询到的依然是N多人在问这种连续布尔运算的问题,没有一个好的解决方案。我想要解决的话,至少要对布尔运算以后的网格进行简化。当然,这是后话了,简化一个网页也不是那么容易,最近,GTS也无法再进行应用。
转而另外一些库,CGAL也支持3D布尔运算,但是其格式感觉比较古怪,还没有搞明白怎么回事,其代码的许可证也要要求开发人员公开代码。当然,作为学生这个可以暂时不考虑,自己用用问题不大。OpenCASCADE集大成者,什么功能都有,就是,太太太复杂了~~~还有最近找到的ACIS,我申请了大学推广计划的许可证,还不知道什么时候能够审批下来,我想这个估计可以满足。另外还有很好用的sgCore,免费版本不支持任意网格的布尔运算,比较讨厌,如果实在不行的话就只有用这个库了,还得测试能不能进行多次布尔运算~
加油,任重道远……