OpenGL ES——导入.stl格式的3D模型

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenGL ES——导入.stl格式的3D模型相关的知识,希望对你有一定的参考价值。

参考技术A

在上一章中,我们使用OpenGL ES绘制了一个 平平无奇的三角形 。那么如何绘制3D模型呢?其实,在计算机的世界中,所有的3D模型都是由无数的三角平面拼接而成。

通常我们使用.stl格式来记录一个3D模型的三角平面信息,根据.stl文件中记录的三角平面信息,我们能够还原出一个完整的3D模型。

因此,本文将介绍,如何从.stl解析出三角平面信息,并绘制出来。

STL 是一种文件格式,格式如:

其中,每个三角面的信息分为三部分:顶点坐标、法线分量、属性位。

和上一章我们画三角形的原理类似,三角形的三个顶点坐标,将决定三角平面的位置与形态。

三点只能确定一个三角形的平面,但平面有两面,到底哪一面是对外的,却无法确定。此时,我们可以设置一个法线,法线的方向就是三角形平面的外面。法线的方向,由xyz三个轴上的分量长度决定。

值得注意的是,如果我们不设置法线,或设置(0,0,0)。则会根据三角形三个顶点的加载顺序,以 右手定则 的形式,确定三角形平面的外面。

不常使用的保留位置。

注释写得比较清楚,不再赘述。在这一段解析中,我们不仅会获得三角形平面的顶点坐标和法向量数组,我们还提供了计算最大半径,计算中心点等方法。

在画布完成创建时,我们需要进行一些初始工作:

这里与上一节的例子类似,不再赘述。

gluLookAt 方法非常有趣。它决定了我们看物体的角度。
想象一下,当我们要看一个物体时,我们有三个属于可以改变:

余下的部分都是非常套路的绘制三角形,不再重复分析。

以上,就是通过STL文件,导致三维模型数据并绘制的全过程。

如有问题,欢迎指正。

OpenGL ES 模型加载器示例

【中文标题】OpenGL ES 模型加载器示例【英文标题】:OpenGL ES model loader example 【发布时间】:2012-12-09 18:39:59 【问题描述】:

我想使用带有着色器的 OpenGL 加载具有光照和凹凸贴图的任何格式的模型。在哪里可以找到有关 c++ 或 java 的示例?

【问题讨论】:

这是一个非常笼统的问题,与***.com/questions/365316/3d-engine-comparison 和***.com/questions/269916/free-java-3d-engine 有点重复 这是一个大而复杂的引擎,但我想要简单的例子。 你要的例子并不简单,任何例子都会非常庞大​​和复杂 【参考方案1】:

我认为您的问题没有简单的答案。没有任何单一的,也没有任何“最常用”的 3D 引擎标准模型文件格式。虽然有几个标准,但其中大多数都是旧的并且不支持许多功能,因此许多引擎使用自己的文件格式来满足自己的要求。

确实存在的标准,例如 Ogre XML,甚至都不是特别常用,而且当它们被使用时,主要是为了“幕后”——在创建模型时工作,然后经常被“编译”为一些特定于引擎的格式,用于实际包含在游戏或程序中。

您可以研究一些开源库,例如JME、the Jogamp samples 或Ogre,看看它们是如何加载模型的,但我还没有看到任何“简单”的示例。 Jogamp 样本可能是最简单的,但也有些过于简单。它们当然不包括任何凹凸贴图等。

如果您想要很多功能而不必自己从头开始实现,那么您最好使用一些预制的游戏引擎库,例如 JME 或 Ogre,而不是直接使用 OpenGL。

【讨论】:

以上是关于OpenGL ES——导入.stl格式的3D模型的主要内容,如果未能解决你的问题,请参考以下文章

cesium导入3D模型(obj转gltf)

OpenGL ES之3D模型加载和渲染

iOS显示STL文件(3D效果)

如何将 Fusion 3D 模型导入 Unreal

3D模型在线查看利器多种格式

3D模型在线查看利器多种格式