平面上のポイントのUV座標をどのように計算しますか?
ポリゴン(3つまたは4つ以上のポイント)が平面上にあります。つまり、すべてのポイントが平面上にあります。しかし、それは空間内のどの角度でもかまいません。
このポリゴンの片側(2つのポイント)は、テクスチャ内の2つの対応する2Dポイントにマッピングされます。これらの2つのポイントは事前にわかっています。また、テクスチャのxスケールとyスケールも知っており、テクスチャ範囲やその他の「エッジケース」から外れるポイントはありません。
これは、最上部のテクスチャクワッドが歪んでいる画像です。
悪いクワッドの輪郭を黄色で示しました。そのクワッドの一番下の2つのコーナーのUV座標を知っていて、他の2つのポイントの適切なUV座標を計算したいとします...
これらの2つのポイントを基準にして、平面内の他のすべてのポイントのUV座標をどのように計算しますか?
私のテクスチャが実際の紙であると想像してください。あなたの(平らな)車のドアにテクスチャを付けたいと思います。紙に2つのドットを配置し、車のドアに2つのドットを並べます。車のドアの他の場所が紙の下にある場所を計算するにはどうすればよいですか?
三辺測量を使用できますか?2D空間の2つの既知の点の擬似コードはどのようになりますか?
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))