0

所以我试图让 OBJ 加载在我的光线跟踪器中工作。加载 OBJ 工作正常,但我在纹理映射工作时遇到了一些麻烦。

这是我的结果的图像。它应该是一个带有彩色“经纬度”线的黑色球体,中间有一个黑点。但似乎每隔一个三角形都是黑色的。你可以在这里看到结果:

在此处输入图像描述

我的教授说看起来法线是向后的,但我不认为是这种情况,因为形状仍在被击中 - “错误”三角形的颜色是纹理背景颜色的颜色(即. 在这种情况下为黑色)。

当我加载 OBJ 时,每个顶点都有一个与之关联的 UV 坐标。当射线击中形状时,我为获得 UV 坐标所做的工作如下:

T: the triangle that was hit
hp: where on the triangle the ray hit
v1,v2,v3: the vertices of the triangle, each has a UV coord UV1, UV2, UV3

find the distance to each v[i] from hp (d1,d2,d3 respectively)
find the weight of each of these (w1 = d1/(d1+d2+d3), same for d2,d3)
find the weighted UV coord: UV1/w1 + UV2/w2 + UV3/w3

find the pixel color based on this weighted coord

有没有人有任何想法可能会发生什么?如果您认为这会有所帮助,我可以发布我的部分代码。

4

1 回答 1

1

您的 UV 坐标计算中确实存在错误(无论您的法线是否存在其他错误)。

我这么说的原因是:例如,如果你的 hp 非常接近 v1,你最终的权重 w1 会非常接近于零,当你计算 UV1/w1 时,它会趋向于 +infinity 而不是期望值紫外线1。

因此,您需要查看重心坐标

于 2013-04-09T18:40:48.577 回答