今天回过头来改一下工具开发中一些debug,由于当时没有时间去解决,所以放在了另一边。首先呢,在切矢量shapefile的房屋面数据时,使用的是mapbox的earcut.hpp来划分三角面的。虽然earcut.hpp已经按照了相关的理论来实现了,具体可以参考文档
https://www.geometrictools.com/Documentation/TriangulationByEarClipping.pdf,从文档中,可以看出对于复杂的图形,这算法都实现了,那么我们现在的房屋面数据应该是不存在问题的。但是求得顶点后,连接三角面还是有问题。我们来看一下有问题的效果。
来看一下细节部分,是不是很怪。
但是,对照了做出来的效果,发现底部是没有问题的,可以说,我们的顶部在三角化时,对顶点的排列出现debug。好了,我们来看一下三角形的排布。
很显然,顶部和底部有着对应的关系。只要修改一下顶部的代码即可。而底部三角化代码为。
for (int idx = 0; idx < indices.size(); idx += 3) {
mesh.index.push_back({ 2 * indices[idx], 2 * indices[idx + 1], 2 * indices[idx + 2] });
}
现在将顶部修改为如下即可。
for (int idx = 0; idx < indices.size(); idx += 3) {
//
mesh.index.push_back({ 2 * indices[idx]+1, 2 * indices[idx + 1]+1, 2 * indices[idx + 2]+1 });
}
最后,再次加载我们修改后的效果。