如何从3D图像生成2D平面切割

2 c# opengl algorithm 3d 2d

我想编写一个C#程序,通过"切片"3D对象或通过切割平面从渲染的3D对象生成2D图像.2D图像的期望输出应该是可以使用CAD显示的数据.例如:

3D图像由其顶点定义,这些顶点包含在Point3DList()中.然后调用一个方法,将Point3DList作为参数,例如:Cut2D(Point3DList).然后,该方法生成2D顶点并将其保存在Point2DList()中,这些顶点可以通过CAD程序读取,该程序以2D形式显示.

因此,我的问题是,在C#(.NET兼容)中是否存在先前的实现,或者是否有任何关于第三方组件/算法的建议来解决此问题.

提前致谢.

The*_*lor 5

您提出了一个有趣的问题,部分原因是不包括3D形状的完整定义.您需要指定顶点和边,或者使用算法从顶点列表中获取边.由于从顶点列表获取边缘的算法转变为指定顶点和边缘,因此我将仅在此处介绍该情况.当顶点和边被转换为平面多边形列表时,我的描述也最有效.要将顶点列表分解为多边形,必须在由顶点和边创建的无向图中找到循环.对于具有顶点A,B和C的三角形多边形,最终将得到AB,BC和AC边.

我能想到的最简单的算法是:

  1. 变换所有点,使得Z轴为0的2D平面(旋转,扭曲,并根据需要移动,以将所需的2D平面变换为与XY平面对齐,其中Z = 0).

  2. 对于每个扁平多边形:
    a.对于每条边,检查顶点在Z轴上是否具有相反的符号(或者如果一个是0).如果Z0*Z1 <= 0,则情况为
    b.使用直线的定义并求解Z = 0的点.这将为您提供交叉点的X,Y.
    C.现在,您有一个点,线或多边形,表示与步骤1相交的原始平面多边形与2D平面相交的交点.
    d.填写由形状形成的多边形(如果需要).如果2D渲染包不会从顶点列表创建多边形,则需要使用扫描线开始渲染像素.

每个单独的算法应该在"C中的算法"或类似的中.

图形程序在开始工作时可以获得相当大的回报.

玩得开心,

雅各