我正在使用CGKit和RTree在 python 中编写一个非常简单的光线追踪器。在将射线与三角形相交后,我想从顶点的 U、V 推断出交点的 U、V。这样做的合适方法是什么?
目前我正在使用与相对边缘的距离的加权平均值,如下所示。除了 CGKit 相关的东西,我有 3 个顶点 v1、v2、v3 和 3 个 UV 的 vt1、vt2、vt3。hit_p 是 CGKit 交集返回的三角形上的 xyz 点。
def extract_hit_vt(tri_geom, tri_vt,hit_p, oa_face):
hit_face = tri_geom.faces[oa_face]
vt1 = np.array(vec3(tri_vt[oa_face * 3]))
vt2 = np.array(vec3(tri_vt[oa_face * 3 + 1]))
vt3 = np.array(vec3(tri_vt[oa_face * 3 + 2]))
v1 = tri_geom.verts[hit_face[0]]
v2 = tri_geom.verts[hit_face[1]]
v3 = tri_geom.verts[hit_face[2]]
d1 = ptlined(v2, v3, hit_p)
d2 = ptlined(v3, v1, hit_p)
d3 = ptlined(v1, v2, hit_p)
hit_vt = (d1*vt1+d2*vt2+d3*vt3)/(d1+d2+d3)
return hit_vt