UV 纹理坐标与 ST 纹理坐标有什么区别?
我知道OpenGL中使用UV和ST。
我也知道Java中也使用ST。
它们的意思是相同的,只是命名约定不同。
U = S = x dimension
V = T = y dimension
计算机图形原理和实践(Foley 等人) 将 2 定义如下:
纹理映射可以分两步完成。一个简单的方法 首先将像素的四个角映射到表面上。为了 一个双三次面片,这个映射自然地定义了一组点 表面的 (s,t) 坐标空间。接下来,像素的角点位于 表面的 (s,t) 坐标空间被映射到纹理的 (u,v) 坐标空间 纹理贴图中的四个 (u,v) 点 定义一个四边形,将更复杂的形状近似为 由于表面曲率,像素实际上可能会映射到该像素。我们计算 通过将位于 四边形,通过所在纹素的分数对每个进行加权 四边形内。如果 (u,v) 空间中的变换点落下 在纹理贴图之外,纹理贴图可能会被视为 复制,就像第 2.1.3 节的模式而不是总是使用 (s,t) 和 (u,v) 之间的恒等映射,我们可以定义一个 0-to 1 (s,t) 矩形的四个角之间的对应关系 和 (u,v) 中的四边形。 当曲面为多边形时, 常见的是将纹理贴图坐标直接分配给其顶点。
uv坐标从左上角开始(v轴朝下)。
st坐标从左下角开始(t轴朝上)。
s = u;
t = 1-v;
我忘了告诉opengl中的纹理应该垂直翻转加载,因为行数据的第一个元素“对应于纹理图像的左下角” (参见 glTexImage2D)。只有在这种情况下,st 和 uv 坐标似乎是同一件事。
这是一个惯例问题。
Autodesk 3D Studio、Alias Maya、NewTek Lightwave 以及其他可能的软件分别使用字母 U 和 V 表示水平和垂直纹理坐标。 DirectX 遵循相同的约定。
然而,Pixar 的 RenderMan 在其参数化 3D 图元中保留了字母 U 和 V 作为参数。因此,对于纹理,他们使用S 和 T 代替。 OpenGL 也使用这种约定来表示纹理坐标。
因此,它们的含义在理论上可能有所不同,但是,除非您从事某些好莱坞电影特效,否则它们可能都表示纹理坐标。
u =(图像宽度(以像素为单位))* S / Q
v =(图像高度(以像素为单位))* T / Q
当不需要透视校正时,Q = 1.0,因此ST只是uv的归一化版本,并且它们之间的差异变得微妙,因此一些3D系统完全跳过uv符号,仅使用st/STQ进行均匀/归一化。