2

当我尝试渲染这段代码时,它只显示梯形的最上面的平面。

我试图从这个梯形上切出一个圆柱体,所以里面有一个圆柱孔。我正在使用差异来做到这一点。我很确定我已经正确地绘制了梯形。如果我从代码中删除“差异”,它会呈现良好。如果我把梯形拿出来,圆柱体渲染得很好(在可怕的分辨率下,我使用了小数字。)

bottomx = 4;
bottomy = 5;
topx = 3;
topy = 5;

difference()
{
    polyhedron (
        points=[ [bottomx,bottomy,0],[bottomx,-bottomy,0],[-bottomx,-bottomy,0],[-bottomx,bottomy,0],
        [topx,topy,5],[topx,-topy,5],[-topx,-topy,5],[-topx,topy,5] ],
    triangles= [ [0,1,2],[2,3,0],
                [4,5,0],[5,1,0],[5,6,1],[6,2,1],[6,7,2],[7,3,2],[7,4,3],[4,0,3],
                [4,5,6],[6,7,4] ]
    );
cylinder([2,2,2], center = true);
}
4

1 回答 1

4

你的多面体实际上不是一个有效的对象。尝试只使用多面体进行编译以进行测试。如果无效,则不会显示。我猜三角形顺序是问题所在。

三角点排序——从外向内看脸时,点必须是顺时针的。您可以重新排列点的顺序或在每个三角形三元组中引用它们的顺序。三角形的顺序无关紧要。请注意,如果您的多边形的方向不同,OpenSCAD 将打印错误或完全崩溃,因此请注意顶点顺序。同样,请记住,三角形向量的“pN”分量是对点向量元素的 0 索引引用。

另外,请仔细查看错误日志。

Rendering Polygon Mesh using CGAL...
CGAL error in CGAL_Build_PolySet: CGAL ERROR: assertion violation!
Expr: check_protocoll == 0
File: /usr/include/CGAL/Polyhedron_incremental_builder_3.h
于 2013-08-18T04:49:12.293 回答