问题标签 [wavefront]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2666 浏览

c++ - 使用 OpenGL 渲染 3D 对象(.obj 文件)时闪烁

在尝试使用 OpenGL(和 GLFW 库)渲染 3D 对象时,模型会出现大量闪烁。.obj我使用自己编写的库读取文件。

下面写的是我的渲染函数:不幸的是,为了了解面和顶点是如何输入的,我必须提供我所有的代码,这些代码是链接的:压缩代码以及可执行文件和示例.obj源代码

我使用 .obj 文件从这里测试程序。目前,该程序不支持法线和纹理,这不是问题,因为网站上的大多数模型都没有它们。此外,(现在)它只从“123.obj”读取,所以文件不应该被命名为其他任何东西。它只接受一个空格,仅此而已。

0 投票
1 回答
2353 浏览

parsing - Cinema 4D .obj 文件无法正确导入

我有一个用 ActionScript 编写的解析器,用于导入 .obj 文件。然后我在 Molehill 中渲染它们,这太棒了。到目前为止,我可以导入我认为具有 x、y、z 顺序或 z、x、y 顺序顶点的标准 .obj 文件。但是,从 Cinema 4D 导出的任何 .obj 文件都会失败。
例如,四面体甚至不渲染 z 分量(.obj 文件的索引具有适当的 z 深度!)。一个简单的立方体缺少一半的三角形面。我听说 Cinema 4D 以 x、z、y 的顺序导出,所以我也试图解释这一点,但没有运气。实际上,顶点顺序不应该导致丢失多边形。

有没有人从 .obj 文件导入 Cinema 4D 网格?有什么特别的技巧吗?Cinema 4D 是否忽略了 Wavefront .obj 标准?提前感谢您的帮助。

更新:我认为罪魁祸首是多边形的索引数据是一组 4 而不是 3。例如,我想要这个:1/1 2/2 3/3 但不是这个:1/1 2/2 3/3 4/4。Cinema 4D 将 .obj 文件导出为后者。无论如何要在解析端或 Cinema 4D 导出端解决这个问题?

Update2:现在索引数据是我想要的方式,但我仍然无法正确渲染。以下是正四面体。当我尝试渲染它时,四个面中只有两个出现:

上面的内容有什么奇怪的吗?(如果我有一个从同一个四面体的另一个标准 3D 软件导出的 .obj 文件会有所帮助)

0 投票
1 回答
311 浏览

graphics - 轻量级波前 obj 模型解析器

我正在寻找一个轻量级的 c++ 波前 obj 解析器。此外,我需要以下能力:

  1. 连接相邻的平面三角形以形成多边形。
  2. 也从 obj 文件中读取曲线

我考虑过 glm 和 assimp,但它们没有提供上述内容。有人可以建议一些东西。

0 投票
4 回答
6703 浏览

parsing - 解析 Wavefront .obj 纹理坐标的问题

我正在为 OpenGL ES 2.0 在 objc 中编写自己的 .obj 解析器,以便更好地了解 OpenGLES 的工作原理。加载顶点并显示带有顶点颜色的模型就像一个魅力。只是一个小提示:我正在使用索引缓冲区。

真正的问题是纹理 atm 的映射。正如您将在下面看到的那样,我的纹理没有按照应有的方式映射。

这是我认为 .obj 格式的工作原理,如果我错了,请纠正我:“f”行描述了一个面,其中斜线之前的数字定义了顶点的索引,斜线之后的数字定义了纹理坐标.

考虑以下 .obj 文件(由 Cinema 4D 导出):

以及以下纹理:

512x512 纹理

现在,当我在 OpenGL ES 3D 空间中定位顶点并尝试将纹理坐标映射到每个单独的顶点时,映射会出错。我可以通过移动一些纹理坐标值来解决这个问题,但我意识到这不是解决问题的方法。我还尝试编辑我的一些 .obj 导出器设置以翻转轴和/或 uv 映射,但它们都不会导致正确的映射。关于 .obj 文件格式,我的理论中有什么遗漏吗?我可能已经说过一件事:我昨天读到 .obj 格式的坐标系统将左上角定义为纹理的锚点。所以我已经在解析中修复了这个问题。

以下是对当前情况的一个小总结: 更新:纹理的坐标系是实际的 .obj 纹理坐标系,而不是 OpenGL 的坐标系。我在我的解析算法中翻译坐标来解决这个问题。

概括

0 投票
3 回答
7798 浏览

c++ - 在波前对象文件(.obj)中,我应该如何在 opengl 中渲染具有 4 个以上顶点的面?

那么使用Wavefront 对象文件我应该如何在 OpenGL 中渲染具有超过 4 个顶点的面?

我知道如果它有 3 个我使用的顶点GL_TRIANGLES,如果它有 4 个我使用GL_QUADS,但如果它有 5 个或更多,我应该使用什么?有标准吗?

0 投票
1 回答
2357 浏览

python - PyOpengl 和 PyQt 性能

我编写了一个 Wavefront OBJ 加载器,它可以工作,但 FPS 在 500 个多边形后下降到 ~3,1000 个多边形等于 ~10 秒延迟,2000+ 个多边形等于冻结和崩溃。

我的 C++/Qt 应用程序加载大约 15-20 FPS 的 100 万个多边形,我怀疑 PyOpengl(ctypes) 和 PyQt(sip) 包装器。

有没有人试图将高分辨率模型加载到 PyOpengl 和 PyQt 应用程序中来帮助我?

编辑:我为 OBJ 加载器使用了“顶点缓冲区对象”,所以与 CPU 无关。

0 投票
2 回答
1687 浏览

model - Obj 模型文件和动画

我正在尝试使用 opengl 加载 obj 模型加载器,我加载了 obj 模型,但我没有足够的关于 obj 模型上的动画的信息。我认为,对于动画来说,带有 obj 模型文件的文件更多。那么你能解释一下文件的内容吗?如何加载文件?

0 投票
1 回答
1267 浏览

android - opengl es 2.0 纹理坐标

我为 android 编写了一个简单的模型查看器,它解析 .obj 波前文件以创建 3d 模型。我正在导出一个简单的 icosphere,该 icosphere 已使用来自搅拌机的 uv 贴图以这种格式提供

“v”表示顶点,“vt”表示纹理坐标,“f”表示面,正斜杠之前的值为顶点对应的索引,斜杠之后的值为纹理坐标对应的索引。我的问题是我不确定如何将纹理坐标索引输入到 opengl 中,所以我当前的模型看起来很奇怪,因为纹理坐标不匹配。

在此处输入图像描述

0 投票
1 回答
1087 浏览

c++ - OpenGL 3.x .obj 加载器与 ADS Phong “看起来像血管一样”的球体

我一直在尝试使用 OpenGL 3.x 核心配置文件制作自己的基本 .obj (Wavefront) 渲染器。我正在使用 OpenGL SuperBible 第 5 版。以及 Swiftless 教程作为参考资料。

几何图形似乎可以正确加载,所以现在我正在尝试让 ADS Phong 照明模型工作,但有些问题很棘手,我认为这与我的 OpenGL 调用或我正在加载的方式有关我的法线,但我似乎无法弄清楚如何解决它。(我猜这也可能是其他问题,因为我不是 OpenGL 专家)。

渲染一个简单的立方体时,它看起来几乎是正确的,但一侧有一个奇怪的光点:

立方体的图片

渲染球体时,光照显示为“静脉”:

球体的图片

我的代码显然有问题。以下是我认为可能相关的代码部分。如有必要,我很乐意发布更多/所有代码......让我知道我是否应该发布更多。

文件:objFileRenderer.cpp

文件:shader.cpp

文件:shader.vert

文件:shader.frag

我知道有很多东西需要看,但我很乐意得到一些帮助来解决这个问题,所以提前感谢任何有时间帮助我解决这个问题的人!

0 投票
2 回答
1745 浏览

c++ - 为 HalfEdge Mesh 加速 .obj 文件加载器的方法?

我正在开发一个 3D OpenGL (C++) 应用程序,其中我有自己的基于半边数据结构的网格结构。我想构建一种简单的方法来将 Wavefront obj 文件加载到我的网格结构中。当然,我可以逐行天真地这样做,但必须有一些更有效的方法(我知道专业应用程序不会天真地逐行加载文件,对于数百万个顶点来说太慢了)。

谁能指点我一个教程或一个非常快速的 OBJ 加载器的例子?如果它与半边数据结构有关,那将是更可取的。

编辑:

我希望解决两个基本问题

1) 避免从文件中读取浮点数的一般缓慢

2)我如何智能地动态确定每个边缘的“相邻”半边。我正在想象某种散列函数来确定正在创建的边的对称边或下一条边是否已经存在,如果存在,则使用该指针。