4

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

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

谢谢!

4

2 回答 2

8

文章中有一个部分是什么 UVW 映射?这解释了:

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

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

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

于 2009-06-01T19:43:31.253 回答
3

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

希望这可以帮助。

于 2009-05-31T12:29:23.760 回答