繁体   English   中英

UV 和 ST 纹理坐标之间的差异

[英]Difference between UV and ST texture coordinates

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 到 1 (s,t) 矩形的四个角与 (u,v) 中的四边形之间的对应关系。 当表面是多边形时,通常将纹理贴图坐标直接分配给它的顶点。

UV坐标从左上角开始(v轴朝下)。
ST坐标从左下角开始(叔轴朝上)。

s = u;
t = 1-v;

我忘了告诉 opengl 中的纹理应该垂直翻转加载,因为行数据的第一个元素“对应于纹理图像的左下角” (参见 glTexImage2D) 只有在这种情况下,st 和 uv 坐标似乎是一回事。

这是约定俗成的问题。

Autodesk 3D Studio、Alias Maya、NewTek Lightwave 和其他可能使用字母 U 和 V 分别表示水平和垂直纹理坐标的公司。 DirectX遵循相同的约定。

然而,皮克斯的 RenderMan 保留了字母 U 和 V 作为参数 3D 基元中的参数。 所以对于纹理,他们使用S 和 T代替。 OpenGL 也将这个约定用于纹理坐标。

因此,它们的含义在理论上可能不同,但是,除非您处理某些好莱坞电影特效,否则它们可能都表示纹理坐标。

STQ 是需要透视校正或畸变时必须使用的纹理坐标系,它与均匀纹素坐标 uv 的关系如下:

u =(以像素为单位的图像宽度)* S / Q

v =(以像素为单位的图像高度)* T / Q

当不需要透视校正时,Q = 1.0,所以 ST 就变成了 uv 的归一化版本,它们之间的差异变得微妙,所以一些 3D 系统完全跳过了 uv 表示法,只使用 st/STQ 来表示均质/归一化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM