从前三个确定第四组 UV 坐标
Determine fourth set of UV coordinates from the first three
假设我有一个四边形,我正在向它应用池 table 纹理。我知道前三个顶点(以蓝色突出显示)的 UV 坐标,但不知道第四个。
比如上图,我知道左上坐标是[0, 0],右上坐标是[1, 0],左下坐标是[0, 1]。如何从数学上确定右下角的 UV 坐标为 [1, 1]?我想弄清楚第四组 UV 坐标在数学上是什么,这样我知道 UV 坐标的三角形中显示的纹理将适合四边形。
我需要能够处理复杂的情况。 UV 坐标和 X、Y 和 Z 坐标可以是任何东西,但我知道它永远是平面。
最后,我需要能够计算具有任意数量顶点的面。
我最初的方法是检查 U 坐标在一定的 X 距离内变化了多少,然后检查 Y 和 Z 的变化,直到我找到关系,但我不断发现该逻辑的新例外,我'我想知道是否有更简单的方法。
如何插入 UV 来计算第四、第五...第 n 个点?没有特定的编码语言 - 我只是在寻找方法。
计算缺少 U/V 属性的顶点的 barycentric coordinates,并使用这些坐标推断缺少的属性(U/V 或任何其他实际属性)。
这是一个完整的推导和解决方案,用于位置 P
和 U/V 坐标 T
:
的附加面顶点
P1 = (x1, y1, z1), T1 = (u1, v1)
P2 = (x2, y2, z2), T2 = (u2, v2)
P3 = (x3, y3, z3), T3 = (u3, v3)
P = (x , y , z ), T = (u , v ) = ?
支持三角形(P1
、P2
、P3
)(因此整个面)的平面上的点 P
具有重心坐标 l1
, l2
, l3
:
P = l1 P1 + l2 P2 + l3 P3
with l1 + l2 + l3 = 1
这可以重写为:
P - P1 = ( l1 - 1 ) P1 + l2 P2 + l3 P3
= -( l2 + l3 ) P1 + l2 P2 + l3 P3
= l2 ( P2 - P1 ) + l3 ( P3 - P1 )
with l1 = 1 - l2 - l3
将向量 V = P - P1
投影到向量 V21 = P2 - P1
和 V31 = P3 - P1
上得到:
< V, V21 > = l2 < V21, V21 > + l3 < V31, V21 >
< V, V31 > = l2 < V21, V31 > + l3 < V31, V31 >
其中 < V1, V2 >
是 3D 向量 V1
和 V2
的点积。
所以(l1
,l2
,l3
)可以通过求解线性方程组得到P
:
G L = ( < V21, V21 > < V31, V21 > ) ( l2 ) = ( < V, V21 > ) = D
( < V21, V31 > < V31, V31 > ) ( l3 ) ( < V, V31 > )
L = ( l2 ) = G^-1 D
( l3 )
and l1 = 1 - l2 - l3
这可以明确解决:
d = < V21, V21 > < V31, V31 > - < V21, V31 >^2
l1 = 1 - l2 - l3
l2 = ( < V31, V31 > < V, V21 > - < V21, V31 > < V, V31 > ) / d
l3 = ( < V21, V21 > < V, V31 > - < V21, V31 > < V, V21 > ) / d
请注意,由于附加顶点的位置 P
在三角形(P1
、P2
、P3
)之外,因此不等式 l1, l2, l3 >= 0
不一定会再持有。
最后计算附加顶点的外推 U/V 坐标 T
:
T = l1 T1 + l2 T2 + l3 T3
假设我有一个四边形,我正在向它应用池 table 纹理。我知道前三个顶点(以蓝色突出显示)的 UV 坐标,但不知道第四个。
比如上图,我知道左上坐标是[0, 0],右上坐标是[1, 0],左下坐标是[0, 1]。如何从数学上确定右下角的 UV 坐标为 [1, 1]?我想弄清楚第四组 UV 坐标在数学上是什么,这样我知道 UV 坐标的三角形中显示的纹理将适合四边形。
我需要能够处理复杂的情况。 UV 坐标和 X、Y 和 Z 坐标可以是任何东西,但我知道它永远是平面。
最后,我需要能够计算具有任意数量顶点的面。
我最初的方法是检查 U 坐标在一定的 X 距离内变化了多少,然后检查 Y 和 Z 的变化,直到我找到关系,但我不断发现该逻辑的新例外,我'我想知道是否有更简单的方法。
如何插入 UV 来计算第四、第五...第 n 个点?没有特定的编码语言 - 我只是在寻找方法。
计算缺少 U/V 属性的顶点的 barycentric coordinates,并使用这些坐标推断缺少的属性(U/V 或任何其他实际属性)。
这是一个完整的推导和解决方案,用于位置 P
和 U/V 坐标 T
:
P1 = (x1, y1, z1), T1 = (u1, v1)
P2 = (x2, y2, z2), T2 = (u2, v2)
P3 = (x3, y3, z3), T3 = (u3, v3)
P = (x , y , z ), T = (u , v ) = ?
支持三角形(P1
、P2
、P3
)(因此整个面)的平面上的点 P
具有重心坐标 l1
, l2
, l3
:
P = l1 P1 + l2 P2 + l3 P3
with l1 + l2 + l3 = 1
这可以重写为:
P - P1 = ( l1 - 1 ) P1 + l2 P2 + l3 P3
= -( l2 + l3 ) P1 + l2 P2 + l3 P3
= l2 ( P2 - P1 ) + l3 ( P3 - P1 )
with l1 = 1 - l2 - l3
将向量 V = P - P1
投影到向量 V21 = P2 - P1
和 V31 = P3 - P1
上得到:
< V, V21 > = l2 < V21, V21 > + l3 < V31, V21 >
< V, V31 > = l2 < V21, V31 > + l3 < V31, V31 >
其中 < V1, V2 >
是 3D 向量 V1
和 V2
的点积。
所以(l1
,l2
,l3
)可以通过求解线性方程组得到P
:
G L = ( < V21, V21 > < V31, V21 > ) ( l2 ) = ( < V, V21 > ) = D
( < V21, V31 > < V31, V31 > ) ( l3 ) ( < V, V31 > )
L = ( l2 ) = G^-1 D
( l3 )
and l1 = 1 - l2 - l3
这可以明确解决:
d = < V21, V21 > < V31, V31 > - < V21, V31 >^2
l1 = 1 - l2 - l3
l2 = ( < V31, V31 > < V, V21 > - < V21, V31 > < V, V31 > ) / d
l3 = ( < V21, V21 > < V, V31 > - < V21, V31 > < V, V21 > ) / d
请注意,由于附加顶点的位置 P
在三角形(P1
、P2
、P3
)之外,因此不等式 l1, l2, l3 >= 0
不一定会再持有。
最后计算附加顶点的外推 U/V 坐标 T
:
T = l1 T1 + l2 T2 + l3 T3