U V纹理坐标与S T纹理坐标之间有什么区别?
我知道U V和S T用于OpenGL。
我也知道S T也用在Java中。
它们意味着相同的东西,它只是一个不同的命名约定。
U = S = x dimension
V = T = y dimension
Computer graphics principles and practice (Foley et al)将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坐标从左下角开始(t轴朝上)。
s = u;
t = 1-v;
我忘了告诉opengl中的纹理应该垂直翻转加载,因为行数据的第一个元素“对应于纹理图像的左下角”(see glTexImage2D)。只有在这种情况下,st和uv坐标似乎是一样的。
STQ是在需要透视校正或变形时必须使用的纹理坐标系,它与均匀纹理坐标uv有关,如下所示:
u =(图像宽度,以像素为单位)* S / Q.
v =(图像高度,以像素为单位)* T / Q.
当不需要透视校正时,Q = 1.0,因此ST变为uv的标准化版本,并且它们之间的差异变得微妙,因此一些3D系统完全跳过uv表示法并且仅使用st / STQ进行均匀/标准化。