我想写一个C#程序,通过“切片”3D对象或通过剖切面从渲染的3D对象生成2D图像。2D图像的期望输出应该是可以使用CAD显示的数据。例如:
3D图像由其顶点定义,这些顶点包含在Point3DList()中。然后调用一个以Point3DList为参数的方法,例如: Cut2D(Point3DList).The方法,然后生成2D顶点并将其保存在Point2DList()中,这些顶点可以通过以2D形式显示的计算机辅助设计程序读取。
因此,我的问题是,在C#(兼容.NET)中是否有以前的实现,或者是否有任何关于第三方组件/算法的建议来解决这个问题。
提前谢谢。
发布于 2009-08-24 18:17:13
你提出了一个有趣的问题,部分原因是没有包含3D形状的完整定义。您需要指定顶点和边,或者指定从顶点列表中获取边的算法。由于从顶点列表中获取边的算法退化为指定顶点和边,因此我将在这里仅介绍这种情况。当顶点和边被转换成平面多边形的列表时,我的描述也是最有效的。要将顶点列表分解为多边形,必须在由顶点和边创建的无向图中找到圈。对于具有顶点A、B和C的三角形,最终将得到边AB、BC和AC。
我能想到的最简单的算法是:
a.对于每条边,检查顶点在Z轴上是否有相反的符号(或者1是否为0)。如果Z0 * Z1 <= 0,则情况就是这样
b.使用直线的定义并求解Z=0所在的点。这将为您提供交叉点的X,Y。
c.现在,您具有一个点、直线或多边形,它表示步骤1中的原始平面多边形与2D平面的交点。
d.填充由形状形成的多边形(如果需要)。如果2D渲染包不会从顶点列表创建多边形,则需要开始使用扫描线渲染像素。
每个单独的算法都应该在“C中的算法”或类似的地方。
当图形程序开始工作时,它们可能会带来相当大的回报。
玩得开心,
雅各布
发布于 2009-08-24 06:44:43
这更多地是opengl特定的,而不是c#特定的,但我要做的是:
旋转和转换一个3d矩阵,这样你想要的‘切片’是在相机的‘前面’的1米。
然后将近地平线和远地平线限制分别设置为1m和1.001m。
-更新-你在使用opengl吗?如果不是,你可以用某种方式自己执行矩阵运算。
发布于 2009-08-24 07:17:54
这听起来像是您想要获得平面与三维曲面或对象的交点的二维表示。虽然我不知道产生这样的东西的算法(我在3D建模应用程序方面做得很少),但我想这就是你所问的。
几年前,我在Graphics Gems或GPU Gems或类似的书中遇到了这样的算法。通过几次Bing搜索,我找不到任何东西,但希望这能给你一些想法。
https://stackoverflow.com/questions/1320266
复制相似问题