最近,我从Turbosquid下载了一个3d三角形网格(.obj格式),它附带了一个2D jpeg图像作为纹理。我计划在我正在开发的程序中使用这个网格,在那里我将从头开始编写自己的代码,解析.obj文件,然后纹理并呈现网格。
在大多数情况下,我的程序目前都可以很好地处理这个问题,但是有几件事情我不知道如何处理,但我不知道如何处理这个特定的.obj文件。
1) UV坐标不在0,1.0仍然是最小值,但似乎没有上界。我假设这意味着纹理环绕网格不止一次,所以我决定提取每个坐标的十进制值并使用它。因此,对于每个坐标,我目前正在执行以下操作:
double u = ReadInValue();
double v = ReadInValue();
u = u - (int)u;
v = v - (int)v;所以,一个紫外线coord,等于1.35,3.29,等于0.35,0.29。在应用时,纹理看起来仍然有点不一样,所以我不确定这是否是正确的做法。
2)有一个额外的W坐标。我意识到,如果我处理的是一个三维体纹理文件,W坐标将以与UV坐标相同的方式工作,并将被简单地用于查找三维的值。然而,我得到的纹理文件是二维的。那么我该如何处理这个额外的W坐标呢?我能忽略它吗?我是否必须将UV坐标除以W项(就好像它是同质坐标一样)?我不太确定该怎么办。
发布于 2014-09-09 08:33:49
1)不能只提取纹理坐标的一个小数部分并期望它工作。对于超过1,1或低于0,0的三角形,这将被打破。例如,带有顶点UVs 0,0和5,5的线条-这应该意味着纹理将被包装5次,但是在计算中,两个顶点都得到0,0。GPU在使用大于1.0甚至是负值的UV方面没有问题,所以只需使用您所拥有的。
2)我们不知道你的模型具体是什么,它可以做三维纹理,所以它有三维和弦,但既然你说它与2D纹理,那么我不认为是这样的。我建议使用第一个答案,只有u,v和弦,看看你得到了什么。
https://stackoverflow.com/questions/25733745
复制相似问题