纹理映射(u,v)值

时间:2015-07-14 01:25:03

标签: graphics texture-mapping raytracing

以下是Peter Shirley计算机图形基础知识的摘录:

  

11.1.2纹理阵列

     

我们假设要映射的两个维度称为u和v。   我们还假设我们有一个nx和ny图像,我们将其用作纹理。   不知怎的,我们需要每个(你,你)都有一个相关的颜色   图片。为(u,v)制作纹理的一种相当标准的方法是   首先删除(u,v)的整数部分,使其位于单元中   广场。这有"平铺"整个uv飞机用   现在正方形纹理的副本。然后我们使用三者中的一个   计算图像颜色的插值策略   坐标。

我的问题是:(u,v)的整数部分是什么?我以为你,v是0< = u,v< = 1.0。如果有一个整数部分,我们不应该将u,v除以纹理图像的宽度和高度来得到标准化的u,v值吗?

2 个答案:

答案 0 :(得分:3)

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。

答案 1 :(得分:2)

彼得奥的回答非常好。我想添加一个高级别的点,图形中使用的坐标系统是一个人们只是坚持作为事实标准的惯例 - 这里没有自然规律,它是任意的(但是一个体面的标准感谢良好)。我认为纹理映射经常令人困惑的一个原因是这个标准的任意性并不明显。这是图像在单位平方[0,1] ^ 2上具有事实上的坐标系。在单位正方形上给我一个(u,v),我会在图像中告诉你一个点(例如,(0.2,0.3)在图像的左下角是20%,在图像的左下角是30% )。但是如果你给我([0,1] ^ 2之外的(u,v)像(22.7,-13.4)那会怎么样?一些规则用于在[0.1] ^ 2上进行,并且描述的GL模式只是用于处理该情况的各种有用的黑客。