2

我有一个 3D 三角网格,它类似于一张弯曲的纸,因为它有 4 个边并且存在于 3 维空间中。边缘可能有不同的长度和不同的曲线,但理论上它可以不断变形,看起来像一张纸。每个顶点都分配了一个 uv 坐标,u 和 v 的范围在 0 到 1 之间。有些顶点显然在边界上。对于底部边界,u 在 [0,1] 范围内,v 为 0。顶部边界顶点的 u 在 [0,1] 范围内且 v = 1。左右边界的 u = 0 或 u = 1(分别) 且 v 在 [0,1] 内。

现在想想 u = 0.5 的“等曲线”。这将是从表面“中间”的底部到顶部的“线”(或线段的集合?)。我将如何找到它?

或者,假设我想找到对应于 uv 坐标 (0.2,0.7) 的 3D 坐标。我怎么去那里?

不想通过将数据放入渲染器(OpenGL 等)来实现这一点。我确信必须有一个标准的方法。感觉就像纹理映射函数的倒数。

4

1 回答 1

1

本质上,您的两个问题都归结为同一件事:如何在坐标之间UV进行转换。XYZ

这是一个插值问题。考虑网格中的单个三角形,您知道 3 个顶点的UVXYZ坐标。因此,您有适量的数据可以将 X、Y、Z 内插为 U、V 的线性函数:

X(U,V) = a0 + a1*U + a2*V
Y(U,V) = b0 + b1*U + b2*V
Z(U,V) = c0 + c1*U + c2*V

那么问题就变成了如何确定系数ai, bi, ci。这可以通过基于给定顶点数据求解一组线性方程来完成。例如,X给定三角形的系数可以通过求解:

[X1]   [1 U1 V1]   [a0]
[X2] = [1 U2 V2] * [a1]
[X3]   [1 U3 V3]   [a2]

一旦你有了网格中每个三角形的所有这些系数,你就可以确定XYZ任何对的坐标UV

1. Locate the triangle that contains the UV point.
2. Evaluate the X(U,V),Y(U,V),Z(U,V) functions for the given triangle.
于 2014-05-16T20:14:42.193 回答