obj文件中的纹理坐标是什么意思?

9
所以问题来了:纹理坐标的值代表什么?例如,在我的obj文件中,纹理坐标看起来像这样:
vt 0.474178 0.050139
vt 0.477308 0.050139
vt 0.480438 0.050139
vt 0.483568 0.050139

我的纹理(bmp文件)大小为640*360。那么obj文件中的(0.474178, 0.050139)是否对应于bmp文件中的(0.474178*640,0.050139*360)点?也就是说,纹理坐标通过进行以下操作来指示bmp文件中的点位置:

 u*width_of_the_bmp,  v*height_of_the_bmp

如果我翻译错了,请问如何获取vt和bmp点的对应关系?因为我想要得到每个顶点的RGB值,又可以获取bmp文件中每个像素的RGB值,如何将这些数据链接起来得到我想要的结果?


如果这确实涉及OpenGL,那么uv坐标的插值将在顶点和片段着色器阶段之间自动完成。只需确保在片段着色器中查找纹理即可。 - BDL
1
值得一读的内容:https://dev59.com/lm035IYBdhLWcg3wPdkS#5532670 - eldo
1个回答

9

没错。

通常情况下,纹理坐标0,0是像素坐标0,0,而纹理坐标1,1是相反的角落。 大于1的纹理坐标会环绕纹理,所以如果你从0,0走到2,0,你会绕过纹理两次。

当然,有些程序可能会以不同的方式解释它们。没有规定必须这样,但通常情况下是这样的。


非常感谢!但还有一个问题。将bmp中的像素点视为矩阵,我们可以得到一个640*360的矩阵。我们可以在这个矩阵中引用像(10,1)这样的点,但是(10.5,1.4)似乎不可能。然而,当将vt坐标与bmp文件的高度/宽度相乘时,很难得到整数,所以四舍五入可能是一种解决方法? - lilliam.C
@lilliam.C 这些将根据程序使用的纹理模式进行四舍五入或插值。 - user253751

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