将Wavefront .obj的vt映射到OpenGL纹理坐标

Iva*_*ica 4 opengl 3d wavefront .obj

一位艺术家朋友给我发了一个由3DS Max 2009导出的.obj文件,该文件包含三个纹理坐标作为vt命令的参数.根据.obj规范,这是正确的.但是,我不确定如何映射为常规2D .jpg纹理提供的UVW坐标.

这对我来说相对重要,因为我玩3DS Max试图弄清楚如何强制它只导出UV坐标,但似乎没有直接的方式.在这种情况下,这只是一个天空盒,但在其他情况下,它可能更复杂,而不是手动固定.

谢谢!

Kai*_*Kai 8

文章" 什么是UVW映射"中有一节这解释了:

您可能会质疑为什么需要像2D平面那样的深度坐标.一个原因是因为相对于几何图形而言,能够翻转地图的方向有时是有用的.为此,您需要第三个坐标.W坐标对三维程序材料也有意义.

在您的情况下,您可以简单地忽略W坐标,只读取以开头的前两行浮点数vt.这假设您并不十分担心W坐标占用的额外空间,因为.obj是一种非常低效的文件格式.

我个人不喜欢在OpenGL中使用.obj,因为它提供了每个面而不是每个顶点的顶点法线.要正确照亮对象,您必须复制顶点或通过平均面中的周围顶点法线来计算法线.如果您想探索更有效的替代方案,请查看二进制格式,例如完整记录的.md2格式.如果你还没有使用它,也可以考虑使用glDrawElements.

  • 当我使用.obj文件时,我发现"vn"条目的数量总是超过"v"条目的数量.导出一个简单的模型,并自己检查.这是因为.obj为不同的面提供了每个顶点的几个法线.这意味着8个顶点立方体最多可以有24个"vn"条目,每个顶点的相邻面一个.要与顶点及其法线一一对应,您必须执行我之前提到的计算.或者,您可以为它共享的每个面复制一个顶点,然后使用所有24个"vn"条目.我希望更清楚! (3认同)