为什么可能会遇到大于1或小于0的纹理坐标


11

我正在研究有关文本texture mapping,在preparing to draw会议中,我读到:

定义纹理包裹参数。这将控制在遇到纹理坐标大于1.0或小于0.0时发生的情况:

glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,wrap);  
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,wrap);  

其中wrap是:
GL_REPEAT:指定如果遇到转换的纹理坐标小于0.0或大于1.0的情况,此模式将重复(即环绕)。

GL_CLAMP:指定模式将“固定”为0.0或1.0的值。

但是没有任何解释遇到这种纹理坐标的原因是什么?
例如,假设我刚刚绘制了一个矩形,并且想在其上应用图像作为纹理,是否有可能遇到这样的坐标?

Answers:


5

并非所有的纹理都使用来自网格数据的纹理坐标。例如,使用投影纹理,您可以将世界转换为纹理空间。好吧,这个世界中的许多都超出了纹理的[0,1]范围。没有适当的夹紧模式,您将遇到问题。


10

精确地重复纹理。

因此,如果您有一个四边形,并且纹理坐标从0变为1,则纹理将绘制一次。如果坐标从0到2且将wrap设置为GL_REPEAT,则纹理将绘制两次。

试试看,自己看看


好的@Panda Pajama,这样的代码如下:float x0 = 0; //图片浮点数y0 = 0的左上角;浮点数x1 = x0 + ImageWidth; //图片浮动量的右下角y1 = y0 + ImageHeight; glBegin(GL_TRIANGLE_STRIP); {glTexCoord2f(0,1); glVertex2f(x0,y1); glTexCoord2f(0,0); glVertex2f(x0,y0); glTexCoord2f(1,1); glVertex2f(x1,y1); glTexCoord2f(1,0); glVertex2f(x1,y0); }是否有可能遇到超出间隔(0,1)的纹理坐标?
Sepideh Abadpour

1
@sepideh:当然不是。您专门将纹理坐标保持在[0,1]范围内。您不了解的是,您不必这样做;你本可以做成任何东西。另外,不要在注释中发布一堆代码。如果您想澄清,请编辑您的问题。
Nicol Bolas

好的,感谢您提供有关将代码传递给我的问题的指导。我正在寻找一种格式化命令中的代码的方法,但是找不到!!!因此,您的意思是遇到这样的坐标不是运行时可能发生的事件。程序员只是清楚地指定了它,以重复或不重复纹理。
Sepideh Abadpour

1
@sepideh“不是运行时可能的事件”是什么意思?glTexCoord2f(0, 2);例如,更改注释中的代码是完全可以的。这在代码和程序运行时都有非常明确的定义。如果看到此消息,则表明程序员有意进行了此操作,因为它可以提供所需的结果。
约瑟夫·曼斯菲尔德

2
@sepideh当然。OpenGL使用您提供的任何值。如果您给它的值在0到1的范围内,您将一无所有。
约瑟夫·曼斯菲尔德

5

是的,您可能会遇到大于1.0和小于的纹理坐标0.0

这完全取决于您加载的模型。通常,对于每个顶点,都会存储位置,法线和纹理坐标。在大多数网格文件格式中,纹理坐标不限于任何范围。

这用于重复纹理。例如,跨越顶点的四间纹理四个时间,纹理坐标将是0,00,44,04,4。没有纹理包裹,你就需要更多的顶点到地面4个面,每个纹理坐标分成4倍0,00,11,01,1。较少的顶点可导致更好的渲染性能。

通常,不希望使用者注意到重复纹理的边缘。因此,在大多数情况下,重复纹理是可平铺的。意思是,右边缘无缝地淡入左边缘,而上边缘无缝地淡入底部。这样,过渡是平滑的,希望用户不会注意到。

一个更高级但相关的主题是,巧妙地掩盖相同纹理多次重复的事实。例如,混合不同大小的重复纹理,例如墙壁纹理和污垢贴花,是一种常见的技术。


Without texture wrapping, you would need additional vertices to split the surface into 4 times 4 sub surfaces with each the texture coordinates 0,0, 0,1, 1,0, 1,1那是一些实际的解释!谢谢!
阿米特·托玛
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.