【问题标题】:texture mapping (u,v) values纹理映射 (u,v) 值
【发布时间】:2015-10-02 11:18:47
【问题描述】:

以下是 Peter Shirley 的计算机图形学基础的节选:

11.1.2 纹理数组

我们假设要映射的两个维度分别称为 u 和 v。 我们还假设我们有一个 nx 和 ny 图像用作纹理。 不知何故,我们需要每个 (u,v) 从 图片。为 (u,v) 制作纹理的一种相当标准的方法是 首先去掉 (u,v) 的整数部分,使其位于单位内 正方形。这具有“平铺”整个 uv 平面的效果 现在方形纹理的副本。然后我们使用三个之一 计算图像颜色的插值策略 坐标。

我的问题是:(u,v) 的整数部分是什么?我认为 u,v 是 0

【问题讨论】:

    标签: graphics texture-mapping raytracing


    【解决方案1】:

    UV 值可以小于 0 或大于 1。去掉整数部分的原因是 UV 值在索引纹理时使用小数部分,其中 (0,0), (0,1), (1, 0) 和 (1,1) 对应于纹理的角。允许 UV 值超过 0 和 1 是使“平铺”效果起作用的原因。

    例如,如果您有一个矩形,其角以 UV 点 (0,0)、(0,2)、(2,0)、(2,2) 为索引,并假设纹理设置为平铺矩形,然后将在该矩形上绘制四个纹理副本。

    UV 值的整数部分的含义取决于环绕模式。例如,在 OpenGL 中,至少有三种包装模式:

    • GL_REPEAT - 整数部分被忽略,没有意义。这就是当 UV 值超过 0 和 1 时允许纹理平铺的原因。
    • GL_MIRRORED_REPEAT - 如果整数部分是奇数,则小数部分被镜像。
    • GL_CLAMP_TO_EDGE - 大于 1 的值被限制为 1,小于 0 的值被限制为 0。

    【讨论】:

      【解决方案2】:

      Peter O 的回答非常好。我想补充一点,图形中使用的坐标系是人们作为事实上的标准坚持的惯例——这里没有自然法则,它是任意的(但谢天谢地,这是一个体面的标准)。我认为纹理映射经常令人困惑的一个原因是这种标准的任意性并不明显。这是图像在单位正方形 [0,1]^2 上具有事实上的坐标系。在单位正方形上给我一个 (u,v),我会告诉你图像中的一个点(例如,(0.2,0.3)在图像的右下角 20% 和 30% 上)。但是如果你给我一个在 [0,1]^2 之外的 (u,v) 会怎样,比如 (22.7, -13.4)?在 [0.1]^2 上使用了一些规则,并且描述的 GL 模式只是处理这种情况的各种有用的技巧。

      【讨论】:

      • 如果 (u,v) 在 [0,1]^2 之外会怎样?通常网格是从 .obj 或某个文件加载的,我们将纹理坐标指定在 0 和 1 之间。为什么以及何时我们会使用 [0,1]^2 之外的 u,v 坐标?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-04
      • 2011-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-30
      • 2011-08-25
      相关资源
      最近更新 更多