首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获得opengl三维模型剖面图?

如何获得opengl三维模型剖面图?
EN

Stack Overflow用户
提问于 2014-11-30 05:24:48
回答 2查看 1.1K关注 0票数 0

我已经加载了一个obj文件来使用pyopengl和pygame来呈现我的opengl模型。三维模型显示成功。

下面是我用obj文件绘制的三维模型,现在我通过y轴将我的模型切割成10块,我的问题是如何在每一片中得到剖面图?

我对openGL非常陌生,有什么办法可以做到吗?

EN

回答 2

Stack Overflow用户

发布于 2014-12-02 07:26:05

有两种方法可以做到这一点,这两种方法都使用裁剪“切片”对象。

  1. 在较早版本的OpenGL中,您可以使用用户剪辑平面“隔离”所需的片。你可能想在剪裁物体之前旋转它,但从你的问题上看还不清楚。您将需要调用glClipPlane(),并且需要使用带有参数GL_CLIP_PLANE0GL_CLIP_PLANE1,……的glEnable启用它。

如果你不明白平面方程是什么,你就得把它读出来。

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

  1. 由于用户剪辑平面被废弃在现代核心OpenGL,你将需要使用一个着色器来获得同样的效果。请参阅gl_ClipDistance[]

在谷歌( Google )上到处搜索,你会得到很多这两个例子的例子。

对不起,没有提供源代码,但我不喜欢张贴代码,除非我100%肯定它的工作,我没有时间现在检查它。然而,我100%肯定你可以很容易地找到一些伟大的例子在互联网上。

最后,如果你不能让它与剪贴板和一些黑客使横截面可见,那么这可能确实是复杂的,因为创建一个现有的模型封闭的横截面是一个困难的问题。

票数 1
EN

Stack Overflow用户

发布于 2014-12-02 02:26:49

您需要拆分对象,然后旋转碎片,以便从侧面看到它们。(或者移动摄像机。)这两种想法是等价的。但是如果你是从零开始编写代码的话,你就没有“相机”的抽象了。)此时,您可以只呈现所有的切片。

--这在原始OpenGL和python中是很复杂的,本质上是因为OpenGL中的对象不是实体的。我强烈建议您在建模程序中提前将对象分割成碎片。如果您需要使用脚本驱动这些操作,请查看Blender的python脚本系统.

现在,为了解释为什么:

当你切一个现实生活中的橘子,你希望得到横截面。你希望能看到水果里面的果肉,还有所有这些三角形的碎片。

在标准多边形三维模型中没有任何东西。

此外,由于一个真正的桔皮有厚度,这是可以从侧面看到皮。相反,一个三维模型的一面是无限薄的,所以当你从侧面看它时,你将什么也看不见。因此,如果您要呈现这个简单模型的切片,从侧面看,每次呈现都是完全空白的。

(嗯,末端的部分会有“盖子”,就像面包的末端是面包,但中间部分是完全看不见的。)

如果没有一个有切分概念的编程库,这将变得非常复杂,非常快。仅仅削减开支是不够的。如果你想要看到横截面,你必须把切割成原来形状所造成的洞封起来。然而,填充横截面必须明智,否则您将得到各种奇怪的阴影工件(fyi:这是由n-龙,如果你想去发现更多关于这些问题)。

回到原来的声明:

建模程序是为了解决这样的问题而设计的,所以我建议您在可能的情况下利用它们的力量。或者至少,您可以检查Blender是如何实现此功能的,因为它是开源的。

在搅拌机中,你可以用刀工具*进行这些切割,然后用“make”命令填充这些洞(只需按F键)。很简单,即使对那些不擅长艺术的人来说也是如此。我鼓励你在做过多的3D编程之前,先了解一下3D建模。这对我有很大的帮助。

*(循环切割工具也可以完成这项工作,但是如果不了解模型的拓扑结构,很难判断。你可能不想现在就了解拓扑,所以就用刀子吧)

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

https://stackoverflow.com/questions/27210321

复制
相关文章

相似问题

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