Obj格式中纹理坐标的问题

5
据我所知,纹理坐标应该在[0,1]范围内,但是在这个obj文件中如下所示,纹理坐标似乎在[0,2]范围内。
vt 2.0000 2.0000 0.0000
vt 1.7500 2.0000 0.0000
vt 1.7500 1.9750 0.0000
vt 2.0000 1.9750 0.0000
vt 1.7500 1.9500 0.0000
vt 2.0000 1.9500 0.0000
vt 1.7500 1.9250 0.0000
vt 2.0000 1.9250 0.0000
vt 1.7500 1.9000 0.0000
vt 2.0000 1.9000 0.0000
vt 1.5000 2.0000 0.0000
vt 1.5000 1.9750 0.0000
vt 1.5000 1.9500 0.0000
vt 1.5000 1.9250 0.0000
vt 1.5000 1.9000 0.0000
vt 1.2500 2.0000 0.0000
vt 1.2500 1.9750 0.0000
vt 1.2500 1.9500 0.0000
vt 1.2500 1.9250 0.0000
vt 1.2500 1.9000 0.0000
vt 1.0000 2.0000 0.0000
vt 1.0000 1.9750 0.0000
vt 1.0000 1.9500 0.0000
vt 1.0000 1.9250 0.0000

为什么这里的纹理坐标可以大于1?有人能解释一下吗?谢谢!

你看,纹理看起来很奇怪。 enter image description here

1个回答

5

UV纹理值在[0,1]之外的部分应该被平铺。

我从未在任何非正式的OBJ规范中明确看到过这一点,但它模仿了OpenGL的行为。

这是来自OpenGL红皮书的相关引用:

您可以分配超出纹理映射范围[0,1]的纹理坐标,并使其在纹理映射中重复或夹紧。对于重复纹理,例如,如果您有一个大平面,其纹理坐标在两个方向上从0.0到10.0运行,则会在屏幕上得到100个纹理的副本平铺在一起。在重复期间,纹理坐标的整数部分将被忽略,并且纹理图的副本将平铺在表面上。对于大多数需要重复纹理的应用程序,纹理顶部的像素应与底部的像素匹配,左侧和右侧边缘同样如此。


为什么要翻转?最常见的行为只是重复,而不是翻转...(尽管翻转或夹紧也是可能的选择)。 - 6502
@nsanders:感谢您的回答!所以我在我的程序中添加了“glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT); glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);”,但纹理仍然看起来很奇怪:(您知道如何解决这个问题吗? - yvetterowe
它应该是什么样子?你确定纹理贴图没有出现问题吗?试着在Blender(或类似的3D建模工具)中加载它。这将表明是你的代码还是模型出了问题。 - nsanders

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接