C++ 如何处理输出:使用实体修剪

C++ 如何处理输出:使用实体修剪,c++,graphics,computational-geometry,cgal,libigl,C++,Graphics,Computational Geometry,Cgal,Libigl,被称为: //用实心B(m_VB和m_FB)修剪网格A(m_VA和m_FA) igl::copyleft::cgal::用实体修剪( m_VA,m_FA//输入:网格A ,m_VB,m_FB//输入:实心B ,m_V,m_F,m_D,m_J//输出 ); 输出被处理为: //循环输出顶点数据 对于(int i=0;i

被称为:

//用实心B(m_VB和m_FB)修剪网格A(m_VA和m_FA)
igl::copyleft::cgal::用实体修剪(
m_VA,m_FA//输入:网格A
,m_VB,m_FB//输入:实心B
,m_V,m_F,m_D,m_J//输出
);
输出被处理为:

//循环输出顶点数据
对于(int i=0;i
好成绩 有时修剪的结果是好的。就像这个用实心圆柱体修剪茶壶模型的例子:

坏结果 但有时修剪结果并不像预期的那样:

如上面的线框视图所示,茶壶和圆筒的交点已正确识别。但由于某些原因,此循环无法检测圆柱体外部的三角形:

//循环输出三角形(面)数据
对于(int i=0;i
有人知道我可能遗漏了什么吗?

以前,我用as solid
B
VB
FB
)。但是它不是水密的。我将其替换为以下代码,该代码创建水密圆柱体

标题:
//创建一个完全实心的圆柱体网格
//没有任何开放的边界
//Z方向下向圆柱体,带参数:
//r:半径
//h:高度
//步骤:有多少条边将创建基圆
//sp:起点
静态空心圆柱(
向量与点
,std::向量和索引
,常数浮点r
,常数浮点h
,常数大小\u t步骤=45
,const QVector3D&sp=QVector3D()
);
资料来源:
void EditorUtils::圆柱体(
向量与点
,std::向量和索引
,常数浮点r
,常数浮点h
,常量大小\u t步骤
、常数QVector3D和sp
)
{
断言(步骤>0);
自动PI=M_PI;
自动步数=整数(ssteps);
积分储备(2*s步);
双a=2*PI/步;
QVector3D jp=sp;
QVector3D endp={sp.x(),sp.y(),sp.z()+h};
//上圆点
对于(int i=0;i
现在,孔已正确创建:

之前,我使用的是固体
B
VB
FB
)。但是它不是水密的。我将其替换为以下代码,该代码创建水密圆柱体

标题:
//创建一个完全实心的圆柱体网格
//没有任何开放的边界
//Z方向下向圆柱体,带参数:
//r:半径
//h:高度
//步骤:有多少条边将创建基圆
//sp:起点
静态空心圆柱(
向量与点
,std::向量和索引
,常数浮点r
,常数浮点h
,常数大小\u t步骤=45
,const QVector3D&sp=QVector3D()
);
资料来源:
void EditorUtils::圆柱体(
向量与点
,std::向量和索引
,常数浮点r
,常数浮点h
,常量大小\u t步骤
、常数QVector3D和sp
)
{
断言(步骤>0);
自动PI=M_PI;
自动步数=整数(ssteps);
积分储备(2*s步);
双a=2*PI/步;
QVector3D jp=sp;
QVector3D endp={sp.x(),sp.y(),sp.z()+h};
//上圆点
对于(int i=0;i