首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析Wavefront .obj纹理坐标时出错

解析Wavefront .obj纹理坐标时出错
EN

Stack Overflow用户
提问于 2012-01-12 23:11:37
回答 4查看 6.6K关注 0票数 3

我正在用objc为OpenGL ES 2.0编写自己的.obj解析器,以便更好地理解OpenGLES是如何工作的。加载顶点并显示一个带有顶点颜色的模型就像一个咒语。请注意:我使用的是索引缓冲区。

真正的问题是纹理atm的映射。正如你将在下面看到的更多,我的纹理没有以它应该的方式映射。

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

考虑以下.obj文件(由Cinema4D导出):

代码语言:javascript
复制
v -75 75 -50
v 75 75 -50
v -75 -75 -50
v 75 -75 -50

vt 0 0
vt 0 1
vt 1 1
vt 1 0

f 4/3 3/2 1/1
f 2/4 4/3 1/1

和以下纹理:

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

更新:纹理的坐标系是实际的.obj纹理坐标系,而不是OpenGL的坐标系。我在我的解析算法中转换坐标来应对这种情况。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-07-26 17:39:24

我将回答我自己的问题:问题似乎是我使用了索引缓冲区来加快性能,但我的纹理坐标仍然映射到原始顶点。

票数 2
EN

Stack Overflow用户

发布于 2012-01-13 22:10:05

据我所知,你所报告的坐标系不正确。

实际上是这样的:

我知道这可能不是对你问题的实际回答,但我希望它能给你带来一些启发。

票数 5
EN

Stack Overflow用户

发布于 2015-10-25 07:22:23

我在解析.obj文件时发现了类似的问题。在我的例子中,我的.obj文件似乎使用了倒置的V(第二纹理坐标)轴。我用这行代码解决了这个问题。V= 1.0f - v;

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

https://stackoverflow.com/questions/8837328

复制
相关文章

相似问题

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