如何计算平面上点的 UV 坐标?
我有一个多边形——3 个或 4 个或更多点——在一个平面上——也就是说,所有的点都在一个平面上。但它可以在空间的任何角度。
这个多边形的一侧 - 两个点 - 将被映射到纹理中的两个对应的 2D 点 - 我提前知道这两个点。我也知道纹理的 x 和 y 比例,并且没有点落在纹理范围或其他“边缘情况”之外。
这是最上面的纹理四边形扭曲的图像:
我用黄色勾勒出一个坏的四边形。想象一下,我知道那个四边形上两个最底角的 UV 坐标,并且想要计算其他两个点的正确 UV 坐标......
如何计算平面中所有其他点相对于这两个点的 UV 坐标?
想象一下我的纹理是现实生活中的一张纸,我想给你的(平的)车门贴上纹理。我在我的纸上放了两个点,我把它和你车门上的两个点对齐。如何计算车门上的其他位置在纸下的位置?
你可以使用三边测量吗?对于二维空间中的两个已知点,伪代码会是什么样子?
使用brainjam的代码成功:
def set_texture(self,texture,a_ofs,a,b):
self.texture = texture
self.colour = (1,1,1)
self.texture_coords = tx = []
A, B = self.m[a_ofs:a_ofs+2]
for P in self.m:
if P == A:
tx.append(a)
elif P == B:
tx.append(b)
else:
scale = P.distance(A)/B.distance(A)
theta = (P-A).dot((B-A)/(P.distance(A)*B.distance(A)))
theta = math.acos(theta)
x, y = b[0]-a[0], b[1]-a[1]
x, y = x*math.cos(theta) - y*math.sin(theta), \
x*math.sin(theta) + y*math.cos(theta)
x, y = a[0]+ x*scale, a[1]+ y*scale
tx.append((x,y))