【问题标题】:Difference between UV and ST texture coordinatesUV和ST纹理坐标之间的差异
【发布时间】:2012-05-21 01:19:57
【问题描述】:

UV 纹理坐标与 ST 纹理坐标有什么区别?

我知道 OpenGL 中使用了 UV 和 ST。

我也知道ST也用在Java中。

【问题讨论】:

  • “我知道opengl中使用了UV和ST” OpenGL规范中没有任何地方曾经指的是UV。
  • @NicolBolas 例如,OpenGL 4.3 规范中有公式 8.7。

标签: java opengl java-3d texture-mapping


【解决方案1】:

它们的含义相同,只是命名约定不同。

U = S = x dimension
V = T = y dimension

【讨论】:

  • 实际上,在 CG 中,您使用其中一对坐标来表示纹理空间中的位置,而另一对则在对象空间中。不同的 API 有时会混淆这一点或使用不同的方式。
  • @Arne 从来没有听说过这个。你能引用一个来源吗?
  • @StefanHanke 嗯,我看了,但找不到。也许我记错了。无论如何,这只是术语。我发现 Blinn 的凹凸映射论文非常适合理解纹理映射和纹理空间操作(research.microsoft.com/apps/pubs/default.aspx?id=73939)。
  • 一个小细节:U 和 V 通常在 [0,0 .. w,h] 范围内,而 ST 在 [0,0 .. 1,1] 范围内。至少 OpenGL 是这样定义的,纹理矩形除外。
  • 库斯玛,这是不对的。 UV 位于纹理坐标中,因此也会介于 0 和 1 之间。ST 可以高于 1.0,但通常会被包裹到 UV 空间中。
【解决方案2】:

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) 中的四边形。 当曲面是多边形时,它是 通常将纹理贴图坐标直接分配给其顶点。

【讨论】:

  • 非常好。所以有区别。根据包裹移动 2 个不同的 ST 对可以给出相同的 UV 对。 ST 是表面坐标,UV 是包裹后的纹理坐标。
  • 没错。我参考了 OpenGL ES 2.0 规范,关于纹理的第 3.7 节。 (S, T) 是片段的归一化对。 (U, V) 可以被视为纹理数组的宽度和高度,以纹素为单位。这些术语不应互换使用。
【解决方案3】:

uv 坐标从左上角 角开始(v 轴朝下)。
st 坐标从左下角开始(t 轴朝上)。

s = u;
t = 1-v;

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

【讨论】:

  • 我不认为 uv 坐标从左上角开始。它们从左下角开始,就像 OpenGL 中的所有其他坐标系一样。然而,一些图像格式从底部开始存储它们的数据,这迫使您要么翻转图像,要么假装坐标系从左上角开始。
  • 非常感谢,1-v 将我的 Maya 中的问题修复为 three.js 导出器。 :D
【解决方案4】:

这是约定俗成的问题。

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

Pixar 的 RenderMan 但是在其参数化 3D 基元中保留了字母 U 和 V 作为参数。所以对于纹理,他们改用S and T。 OpenGL 也将这种约定用于纹理坐标。

所以它们的含义在理论上可能不同,但除非你处理一些好莱坞电影特效,否则它们可能都表示纹理坐标。

【讨论】:

    【解决方案5】:

    STQ是需要进行透视校正或变形时必须使用的纹理坐标系,它与齐次纹理坐标uv的关系如下:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-02
      • 1970-01-01
      • 2015-06-23
      • 1970-01-01
      • 2016-06-11
      • 2013-03-11
      相关资源
      最近更新 更多