首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从3D图像生成2D剪切平面

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

Stack Overflow用户
提问于 2009-08-24 02:41:34
回答 5查看 3.8K关注 0票数 2

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

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

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

提前谢谢。

EN

回答 5

Stack Overflow用户

发布于 2009-08-24 18:17:13

你提出了一个有趣的问题,部分原因是没有包含3D形状的完整定义。您需要指定顶点和边,或者指定从顶点列表中获取边的算法。由于从顶点列表中获取边的算法退化为指定顶点和边,因此我将在这里仅介绍这种情况。当顶点和边被转换成平面多边形的列表时,我的描述也是最有效的。要将顶点列表分解为多边形,必须在由顶点和边创建的无向图中找到圈。对于具有顶点A、B和C的三角形,最终将得到边AB、BC和AC。

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

  1. 变换所有点,使Z轴为0的2D平面。(根据需要旋转、扭曲和移动,以变换所需的2D平面以与XY平面对齐,其中Z=0)。对于每个平面多边形,

a.对于每条边,检查顶点在Z轴上是否有相反的符号(或者1是否为0)。如果Z0 * Z1 <= 0,则情况就是这样

b.使用直线的定义并求解Z=0所在的点。这将为您提供交叉点的X,Y。

c.现在,您具有一个点、直线或多边形,它表示步骤1中的原始平面多边形与2D平面的交点。

d.填充由形状形成的多边形(如果需要)。如果2D渲染包不会从顶点列表创建多边形,则需要开始使用扫描线渲染像素。

每个单独的算法都应该在“C中的算法”或类似的地方。

当图形程序开始工作时,它们可能会带来相当大的回报。

玩得开心,

雅各布

票数 5
EN

Stack Overflow用户

发布于 2009-08-24 06:44:43

这更多地是opengl特定的,而不是c#特定的,但我要做的是:

旋转和转换一个3d矩阵,这样你想要的‘切片’是在相机的‘前面’的1米。

然后将近地平线和远地平线限制分别设置为1m和1.001m。

-更新-你在使用opengl吗?如果不是,你可以用某种方式自己执行矩阵运算。

票数 0
EN

Stack Overflow用户

发布于 2009-08-24 07:17:54

这听起来像是您想要获得平面与三维曲面或对象的交点的二维表示。虽然我不知道产生这样的东西的算法(我在3D建模应用程序方面做得很少),但我想这就是你所问的。

几年前,我在Graphics Gems或GPU Gems或类似的书中遇到了这样的算法。通过几次Bing搜索,我找不到任何东西,但希望这能给你一些想法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1320266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档