问题:多个立方体面靠面的堆叠在一起,如何提取其外表面。
比如两个并排的立方体,一共6+6=12个面,但是中间有两个面是在内部,如何识别出这两个面,并把他们去掉呢?
本文主要解决以下几个问题:
1. 如何实现立方体堆叠;
2. 如何清理重复顶点;
3. 如何清除内部面;
上代码
#include <vtkSmartPointer.h>
#include<vtkTriangleFilter.h>
#include<vtkCleanPolyData.h>
#include<unordered_set>
#include<set>
// 定义hash函数,用于删除重复的面,面的所有顶点id都一样,则认为是重复的面
size_t hash(std::set<int>& s)
{
size_t result = 0;
auto it = s.begin();
for (; it != s.end(); it++)
{
if (it == s.begin())
result = std::hash<int>()(*it);
else
result = result ^ std::hash<int>()(*it);
}
return result;
}
int main()
{
// 要保证添加正方向顶点坐标的时候,是按照如下图所示顺序添加的
// 0 --------- 1
// /| /|
// 2-+---------3 |
// | | | |
// | 4---------+-5
// |/ |/
// 6-----------7
int cube_ids[6][4] = { {0,