以下是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值吗?
答案 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)