如何获得opengl 3d模型剖面图?

时间:2014-11-30 05:24:49

标签: python opengl pyopengl

我已经加载了一个obj文件来使用pyopengl和pygame渲染我的opengl模型。 3D模型成功展示。

下面是我使用obj文件渲染的3D模型,现在我通过y轴将我的模型切割成十个部分,我的问题是如何获得每个部分的剖面图?

我对openGL真的很新,有什么方法可以做到吗?

my 3d model

2 个答案:

答案 0 :(得分:1)

有两种方法可以做到这一点,并且都使用限制来剪切"切片"对象。

  1. 在早期版本的OpenGL中,您可以使用用户剪辑平面来“隔离”#34;你想要的切片。您可能希望在剪辑之前旋转对象,但是您的问题并不清楚。您需要致电glClipPlane(),然后您需要使用glEnable GL_CLIP_PLANE0GL_CLIP_PLANE1,...
  2. 启用它

    如果你不了解飞机方程式,你必须阅读它。

    理论上,您应该通过使用参数glGetIntegerv调用GL_MAX_CLIP_PLANES来查看GPU上存在多少个用户剪裁平面,但所有GPU都支持至少6个。

    1. 由于现代Core OpenGL中不推荐使用用户剪辑平面,因此您需要使用着色器来获得相同的效果。请参阅gl_ClipDistance[]
    2. 在Google上搜索可以为您提供大量示例。

      很抱歉不提供源代码,但我不想发布代码,除非我100%确定它有效并且我现在没时间检查它。但是我百分百肯定你可以在互联网上轻松找到一些很好的例子。

      最后,如果你不能使用剪裁平面和一些黑客来使横截面可见,那么这可能确实很复杂,因为从现有模型创建封闭横截面是一个难题。

答案 1 :(得分:0)

您需要拆分对象,然后旋转这些碎片,以便从侧面看到它们。 (或者移动相机。这两个想法是等价的。但是如果你从头开始编码,你就不会真正拥有'相机'的抽象。)此时,你可以渲染所有切片。 / p>

在原始的OpenGL和python中这很复杂,主要是因为OpenGL中的对象不稳定。我强烈建议您在建模程序中提前将对象切片。如果你需要使用脚本来驱动这些操作,也许可以查看Blender的python脚本系统。

现在,解释原因:

当你切一个真实的橙色时,你希望得到横截面。你希望能够看到里面的水果的肉,所有这些三角形的碎片。

标准多边形3D模型中没有任何内容。

此外,由于真橙的外皮有厚度,因此可以从侧面观察外皮。相比之下,3D模型的一个面是无限薄的,所以当你从侧面看它时,你什么都看不到。因此,如果你要渲染这个简单模型的切片,从侧面看,每个渲染都将是完全空白的。

(嗯,最后的位将有'大写',就像一块面包的末端,但中间部分将是完全不可见的。)

如果没有一个具有切割概念的编程库,这将变得非常复杂,非常快。简单地削减是不够的。如果要查看横截面,必须将切割成的孔密封成原始形状。然而,填充横截面必须聪明地完成,否则你将结束各种奇怪的阴影工件(fyi:这是由n-gons引起的,如果你想发现更多关于这些问题的话)。 / p>

返回原始声明:

建模程序旨在解决这些问题,因此我建议您尽可能利用它们的功能。或者至少,您可以检查Blender如何实现此功能,因为它是开源的。

在Blender中,您可以使用刀具*进行这些切割,然后使用'make face'命令填充孔(只需按F)。很简单,即使是那些不擅长艺术的人。我鼓励您在进行太多3D编程之前先学习一下3D建模。它个人帮了我很多。

*(循环切割工具也可以完成这项工作,但是如果不了解模型的拓扑结构就很难分辨。你可能不想立即理解拓扑结构,所以只需使用刀具)< / p>