首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据前三组UV坐标确定第四组UV坐标

根据前三组UV坐标确定第四组UV坐标
EN

Stack Overflow用户
提问于 2017-03-16 15:05:35
回答 1查看 155关注 0票数 1

假设我有一个四边形,我正在对它应用一个台球桌纹理。我知道前三个顶点的UV坐标(以蓝色突出显示),但不知道第四个顶点的UV坐标。

例如,在上图中,我知道左上角坐标是0,0,右上角坐标是1,0,左下角坐标是0,1。我如何从数学上确定右下角UV坐标是1,1?我想要计算出第四组UV坐标在数学上是什么,这样显示在三角形中的纹理我知道UV坐标将适合四边形。

我需要能够处理复杂的情况。UV坐标和X,Y和Z坐标可以是任何东西,除了我知道它永远是一个平面。

最后,我需要能够计算具有任意数量顶点的面。

我最初的方法是检查U坐标在特定的X距离上变化了多少,然后对Y和Z也是如此,直到我找到了一个关系,但我一直在寻找这种逻辑的新例外,我想知道是否有更简单的方法。

我如何插值UV来计算第四,第五...第n点?没有特定的编码语言--我只是在寻找方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-16 22:06:33

计算缺少U/V属性的顶点的barycentric coordinates,并使用这些坐标推断缺少的属性(U/V或实际上的任何其他属性)。

下面是一个具有位置P和U/V坐标T的附加面顶点的完整推导和解决方案

代码语言:javascript
复制
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 ) = ?

支撑三角形(P1P2P3) (以及整个面)的平面上的点P具有重心坐标l1l2l3

代码语言:javascript
复制
P = l1 P1 + l2 P2 + l3 P3

with l1 + l2 + l3 = 1

这可以重写为:

代码语言:javascript
复制
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 - P1V31 = P3 - P1上会得到:

代码语言:javascript
复制
< V, V21 > = l2 < V21, V21 > + l3 < V31, V21 >
< V, V31 > = l2 < V21, V31 > + l3 < V31, V31 >

其中< V1, V2 >是3D矢量V1V2的点积。

因此(l1l2l3)可以通过求解线性系统来求解P

代码语言:javascript
复制
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

这可以显式地解决:

代码语言:javascript
复制
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位于三角形(P1P2P3)之外,因此不等式l1, l2, l3 >= 0不一定再成立。

最后,计算附加顶点的外推U/V坐标T

代码语言:javascript
复制
T = l1 T1 + l2 T2 + l3 T3
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42827376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档