什么是UV纹理坐标和ST纹理坐标的区别?
我知道在OpenGL中使用UV和ST。
我也知道ST在Java中也被使用。
什么是UV纹理坐标和ST纹理坐标的区别?
我知道在OpenGL中使用UV和ST。
我也知道ST在Java中也被使用。
它们的意思是一样的,只是命名方式不同。
U = S = x dimension
V = T = y dimension
《计算机图形学原理与实践》(Foley等)对纹理映射的定义如下:
纹理映射可分为两步。简单的方法是先将像素的四个角点映射到表面上。对于双三次贝塞尔曲面,这种映射自然地定义了表面(s,t)坐标空间中一组点。接着,将表面(s,t)坐标空间中像素的角点映射到纹理(u,v)坐标空间中。纹理映射中的四个(u,v)点定义了一个四边形,近似于像素由于表面曲率而实际映射到的更复杂的形状。我们通过加权求和在四边形内所有纹素的值来计算像素的值,每个纹素的权重由其在四边形内所占比例决定。如果在(u,v)空间中的变换点超出了纹理映射,则可以将纹理映射看作是被复制的,就像第2.1.3节中的模式一样。我们可以将0到1的(s,t)矩形的四个角点与(u,v)中的一个四边形相对应,而不总是使用(s,t)和(u,v)之间的恒等映射。 当表面为多边形时,通常直接将纹理坐标赋值给其顶点。
uv坐标从左上角开始(v轴向下)。
st坐标从左下角开始(t轴向上)。
s = u;
t = 1-v;
我忘了告诉你,在OpenGL中加载纹理时应该垂直翻转,因为行数据的第一个元素“对应纹理图像的左下角”,详情请参见(glTexImage2D)。只有在这种情况下,st和uv坐标才是相同的。
1-v
修复了我在Maya转three.js导出器中的问题。 :D - kungfoomanSTQ是纹理坐标系,在需要透视校正或扭曲时必须使用,它与齐次纹理坐标uv的关系如下:
u =(像素中的图像宽度)* S / Q
v =(像素中的图像高度)* T / Q
当不需要透视校正时,Q = 1.0,因此ST仅成为uv的标准化版本,并且它们之间的差异变得微妙,因此一些3D系统完全跳过uv符号,只使用st / STQ用于齐次/标准化。
Original Answer翻译成"最初的回答"