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

时间:2009-05-28 20:21:57

标签: opengl 3d .obj wavefront

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

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

谢谢!

2 个答案:

答案 0 :(得分:8)

文章What Is UVW Mapping?中有一节解释:

  

你可能会质疑为什么需要一个   2D的深度坐标,如W   平面。一个原因是因为它   有时可以翻转   相对于地图的方向   它的几何形状要做到这一点,你需要   第三个坐标。 W坐标   对三维也有意义   程序材料。

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

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

答案 1 :(得分:3)

抱歉,如果我误解了你的问题。但是你不能简单地忽略第三个参数吗? 据我了解,w只是垂直于u和v描述的平面的平面中的坐标,因此简单的2d纹理映射很少需要它。

希望这会有所帮助。

相关问题