OpenGl中的拉伸切割

问题描述:


如何挤压切割(如solidworks)3D模型?
有没有简单的方法,或者我需要做一些复杂的计算?OpenGl中的拉伸切割

你想要做的是一个名为构造实体几何(CSG)的学科的一部分,它是关于3D图形和处理最棘手的主题之一。有几种方法如何解决这个问题:

  • 如果你是在光线跟踪事情真正得到很容易使CSG只是感兴趣的是:在每一个射线/表面相交你递增/递减计数器。 CSG组合也可以转化为表面计数。通过对射线交点计数器和CSG曲面数进行对比,您可以将CSG运算应用于所跟踪的射线。如果您对在三角模型上进行CSG感兴趣,最常见的方法是从几何构建BSP树并应用BSP上的CSG运营。然后从生成的BSP重新创建网格。这就是它在基于网格的建模器中的实现方式(看看Blender的源代码,它确实是这样)

  • 分析表面上的CSG非常困难。曲线或曲面的交点没有封闭的解决方案。最好的方法是在交点处数字地找到许多采样点,并沿交叉点拟合一条曲线。这可能会在数值上不稳定。 (这是我为我的3D引擎实现(甚至可能发明)):在3D硬件上渲染曲线或曲面片时,通常必须在之前将它们镶嵌到三角形网格中。在这个tesselation阶段中,您可以测试新创建的三角形的边与曲线/曲面相交;在牛顿过零点求解器中使用一些迭代来找到两个曲线/曲面的交点,并将其作为边界上的采样点存储,以便两个曲面相关(这样其他曲面的曲面将共享其顶点的位置与第一个表面)。在第一个tesselation阶段之后,在顶点上使用松弛方法(基本上应用拉普拉斯算子),同时将它们约束到表面(记住您的曲面是数学上精确的,并且很容易摆弄曲面的变量,但使用结果职位为公制)。它工作得很好,只要用普通的三角网格没有交叉点被认为是(网格的每个三角形不得不变成一个曲面片,减缓方法)

您标记此OpenGL的,所以为了得到这一点:OpenGL不能帮助你,因为OpenGL只是画三角形,而不是处理复杂的几何图形。

引用的OpenGl faq

什么是OpenGL的?

OpenGL代表Open Graphics Library。它是一个用于执行3D 图形的API。

更具体地说,它是一个API ,用于“在您的场景上绘制三角形”。在这个GPU时代,它是 是关于与GPU交谈,使它 做图纸的工作。它不处理文件格式 。它不是 开放的BMP,PNG和任何图像格式。它 不能打开3d对象格式,如 obj,max,maya。它不会做 动画。它不处理 键盘,鼠标和任何输入设备。 它不创建窗口,所以 。

所有的东西应该由 外部库来处理(GLUT是一个例子 ,其用于创建和销毁 一个窗口和处理鼠标 和键盘)。

GL已经历了多个 版本。

所以答案是否定的。像挤压切割这样的事情是复杂的操作。你必须自己实施它,使用第三方库。

+0

谢谢你的回答,我的意思是有一些图书馆为我做这件事? Glu可以做吗? ... – mrbm 2011-05-03 11:07:36