问题标签 [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 投票
2 回答
4188 浏览

c++ - 加载 OBJ 文件,如何使用法线 (#vertices < #normals)

我有一个 obj 文件,并且在没有使用给定法线的情况下成功地将对象加载到 opengl。
这是它的外观:
没有法线的树
文件的格式是:

网格的显示功能是这样的:

结果是这样的:
在此处输入图像描述

我读过由于 OpenGL 用于照明方程的默认法线向量,该对象可能看起来很平坦。
这可以用法线解决。给定的法线是 780,顶点是 155。

我在每次调用 glVertex3f 之前都尝试过使用 glNorm,但 obj 看起来很奇怪(线条等)。

我应该怎么办?

编辑#1: 这就是我读取文件的方式:

这就是我展示它的方式:

函数 displayMesh 在 openGL 的 Render 函数中调用,loader 函数在 Setup OpenGL 函数中调用,并且网格树对象是一个全局变量。

编辑#2: 这是树与法线的外观:
有法线的树也是 OpenGL 设置函数的代码

0 投票
1 回答
7105 浏览

c++ - opengl中的对象加载器

我在 C++ 中创建了一个包含 opengl 的程序,我还想创建一个 obj 加载器以加载我拥有的 obj 文件!我已经创建了两个函数,它们是:

主要问题是当我编译项目并运行它时,视口中什么也没有出现。我还增加了视口的尺寸,以防它很小以显示对象,但情况保持不变!所以我得出的结果是我在这些功能中做错了!谁能帮帮我?!

我还给出了我的 obj 文件的一些值:

0 投票
2 回答
1360 浏览

c++ - GLSL 将指示法线传递给着色器

我在搅拌机中生成模型(Suzie)并将其导出到带有法线的 .obj 文件。在我的应用程序加载模式期间,我注意到顶点和法线的数量不同(2012 年和 1967 年)。

型号详情

我尝试实现简单的单元格着色。问题在于将法线传递给着色器。为了存储顶点数据,我使用来自 glm 的向量。

结果我到目前为止

错误的法线

缓冲区布局

渲染片段

0 投票
1 回答
374 浏览

3d - Wavefront OBJ 中人脸元素的排序

我想了解 OBJ 文件的结构。

面部元素是否有特定的顺序?各种消息来源暗示它通常以允许更直接渲染的顺序保存,但没有明确的答案。该规范似乎也没有提及它。这是否意味着顺序是任意的并且由解析器来处理它?

0 投票
1 回答
3945 浏览

graphics - 如何使用Blender使用粒子系统在OBJ文件中导出顶点法线(vn)

我有一个能够在 OpenGL 上下文中解析和解释 OBJ 文件格式的程序。

我在 Blender 中创建了一个小项目,其中包含一个带有“头发”粒子的简单球体。

转换后(从球体中分离粒子)我的粒子形成一个新的网格。所以我的项目中有两个网格(名为“Sphere”和“Hair”)。当我想在 OBJ 文件(文件/导出/Wavefront (.obj))中导出网格“球体”时,选择“包含法线”,导出后,该文件包含有关法线的所有信息(例如:vn 0.5889 0.14501 0.45455, ...)。

当我尝试对粒子做同样的事情时,也选择“包含法线”,我在 OBJ 文件中没有法线。(在导出之前,我已经选择了正确的网格。)

所以,我不明白为什么不为类型粒子的网格导出法线属性。

这是我的头发颗粒的一般 Blender 渲染图。如您所见,所有粒子都会与光发生反应。所以 Blender 使用这些粒子的法线属性。

在此处输入图像描述

现在,上图显示(在 Blender 的“编辑模式”-> 转换后)粒子由几行组成。在我的 opengl 程序中,我使用 GL_LINES 来渲染相同的粒子。我只想拥有法线信息来管理我的粒子上的光属性。

在此处输入图像描述

您知道如何导出粒子网格的法线属性吗?

在此先感谢您的帮助。

0 投票
0 回答
306 浏览

matlab - 使用欧拉角旋转 wobj 顶点

专家您好!

我有一个欧拉旋转矩阵:

我确定旋转矩阵是正确的。当我尝试对 wobj 文件(在本例中为框)应用旋转时,会出现问题。

我想旋转一个看起来像这样的盒子:

如果我做:

然后在旋转后再次将顶点转回来

我得到一个错误的旋转。谁能帮帮我?

问题说明: 盒子没有像红色系统那样旋转(X,Y,Z)

0 投票
1 回答
1026 浏览

android - 编写我自己的 OBJ 解析器来加载 VBO 中的数据,如何重新排序数据以匹配单个索引列表?

我一直在尝试将我之前编写的使用显示列表的 OBJ 解析器转换为使用 VBO,并试图看看我是否可以在没有任何外部帮助的情况下自己解决这个问题,但现在我想我一直在看代码太长,找不到任何错误。

这是一个 Android 应用程序,通过 OpenGLES 2.0,我最终在屏幕上出现了一些三角形,但根本不在正确的位置。我有一种感觉,我尝试根据单个索引列表获取每个面的所有元素是不正确的,我最终只是把所有东西都乱七八糟地扔掉了,但我找不到我的错误。

本质上,由于 OBJ 格式为顶点、纹理坐标和法线向量提供了单独的索引,因此我最终得到了 3 个彼此完全乱序的数据列表,但 VBO 基于单个引用每个部分索引列表。

这是我的代码,以帮助某人帮助我:

OBJ工具包:

网格类:

我是否在做一些我无法发现的明显错误或过于复杂的事情?

我感谢任何愿意提供意见的人。

0 投票
0 回答
827 浏览

blender - Blender 导出到 obj 弄乱了我的法线

我在使用 Blender 的 Wavefront 导出器时遇到了一些问题。

实际上我正在为 .obj 网格开发一个解析器。我在 Blender 中创建了一个网格,设置了它的 UV、法线等等......当我用我的加载器加载这个网格时,UV 被正确放置但不是法线,实际上它们都被翻转了!
如果我在 Blender 中翻转所有法线,网格会正确显示在我的应用程序中。奇怪的是,如果创建一个简单的立方体,导出它,加载它,在我的应用程序中显示它,它会正确显示,而不必在 Blender 中“糟糕”地翻转。
我对导出器的参数进行了很多尝试,我设置了我的网格平滑,以便我确定我得到每个顶点法线......
我尝试通过设置背面剔除 ON/OFF,事实上我尝试了很多我发现的东西没有结果的互联网。

这是我的一些代码:

. . .

然后我用所有这些数据填充 WPF MeshGeometry3D。

如果您有任何想法...谢谢

在搅拌机 2.66

0 投票
1 回答
604 浏览

android - Android OBJ to VBO loader,垃圾回收循环,如何改进?

我最近刚刚获得了一个 OBJ 加载器,并查看了 Android 应用程序在顶点、法线和纹理坐标方面正常工作,但为了正确跟踪这些数据值,我最终创建了很多单独的对象。我在网上读到的一件事是长字符串或大字符串数组/数组列表占用了大量的内存。我试图摆脱这两种单独的方法,一种将文件解析为字符串的 ArrayList,另一种通过该 ArrayList 读取,方法是将两者结合起来,同时将文件中的行存储删除到一个大的 ArrayList 中。我替换了我的代码,以便它在读取文件时解释文件,但这也没有减少模型加载时间。我使用的测试模型是 Suzanne 猴头,在 Blender 中细分一次并导出为 OBJ,大约有 2000 个顶点。我不确定还能做什么来抵御垃圾收集器。另请注意,这是为 Android 2.2 构建的,因此我无法像在 Android 3.0 及更高版本中那样指定更大的堆大小。非常感谢任何可以给出的指针,因为我想让这个加载器尽快加载,但我不完全确定如何做到这一点。

这是迄今为止的来源:

我考虑过替换使用我制作的 Vector3f 和 Vector2f 类并改用数组,但我不确定这是否真的会减少内存使用量,因为数组对象具有所有额外的功能我不需要。

我还尝试将不再需要的东西设置为 null,希望 GC 会自动摆脱它们,在堆中留下更多内存,但这似乎根本没有帮助。

OBJToolkit 类是这里的主类,但以防万一我将在下面包含其他相关类:

网:

脸:

顶点:

矢量3f:

矢量2f:

主要活动:

OpenGL渲染器:

0 投票
2 回答
2727 浏览

android - LibGDX 和 ObjLoader 不显示 .mtl?

我正在尝试使用 LibGDX 将 .obj 文件加载到 Android 项目中。这些文件没有纹理文件,但在 .mtl 文件中包含材质。我正在使用最新的官方每晚,并且渲染目标文件只会导致对象显示为白色。如何让 ObjLoader 使用 .mtl 文件?

这就是调用渲染对象的代码的方式。这是 ObjLoader 类的链接

https://github.com/libgdx/libgdx/blob/master/gdx/src/com/badlogic/gdx/graphics/g3d/loaders/wavefront/ObjLoader.java

我究竟做错了什么?为什么它不会加载 .mtl 文件?据我了解,它应该加载与 .obj 文件位于同一文件夹中且名称相同的 .mtl 文件。

编辑 我有点搞砸了,在 ObjLoader 类中添加了一些行来记录它是什么,没有加载。看起来它正在加载 mtl 文件,并将每个 mtl 分配给一个 Material 实例,而且看起来 obj 正在正确地请求这些材料。

我需要在 OpenGL 端启用或以其他方式执行某些操作以确保它正确使用这些材料吗?