gpt4 book ai didi

opengl - 为什么此OpenGL着色器使用超过1.0的纹理坐标?

转载 作者:行者123 更新时间:2023-12-04 18:14:20 26 4
gpt4 key购买 nike

我正在尝试熟悉opengl中的着色器。这是我发现的一些示例代码(使用openframeworks)。该代码仅在两遍中首先对图像进行模糊处理,首先是水平地,然后是垂直地。这是来自水平着色器的代码。我唯一的困惑是纹理坐标。他们超过1。

void main( void )
{
vec2 st = gl_TexCoord[0].st;
//horizontal blur
//from http://www.gamerendering.com/2008/10/11/gaussian-blur-filter-shader/

vec4 color;

color += 1.0 * texture2DRect(src_tex_unit0, st + vec2(blurAmnt * -4.0, 0));
color += 2.0 * texture2DRect(src_tex_unit0, st + vec2(blurAmnt * -3.0, 0));
color += 3.0 * texture2DRect(src_tex_unit0, st + vec2(blurAmnt * -2.0, 0));
color += 4.0 * texture2DRect(src_tex_unit0, st + vec2(blurAmnt * -1.0, 0));

color += 5.0 * texture2DRect(src_tex_unit0, st + vec2(blurAmnt , 0));

color += 4.0 * texture2DRect(src_tex_unit0, st + vec2(blurAmnt * 1.0, 0));
color += 3.0 * texture2DRect(src_tex_unit0, st + vec2(blurAmnt * 2.0, 0));
color += 2.0 * texture2DRect(src_tex_unit0, st + vec2(blurAmnt * 3.0, 0));
color += 1.0 * texture2DRect(src_tex_unit0, st + vec2(blurAmnt * 4.0, 0));

color /= 5.0;
gl_FragColor = color;
}

我无法从这段代码中得出正面或反面的信息。纹理坐标应该在0到1之间,并且我已经读过一些有关它们大于1时发生的情况的信息,但这不是我所看到的行为(或者我看不到连接)。 blurAmnt在0.0到6.4之间变化,因此s可以从0到25.6。根据值的不同,图像只会或多或少地变得模糊,我看不到任何重复的图案。

我的问题可以归结为:当对texture2DRect的调用中的纹理坐标参数超过1时,到底发生了什么?为何尽管如此,模糊行为仍能完美发挥作用?

最佳答案

[0,1]纹理坐标范围仅适用于GL_TEXTURE_2D纹理目标。由于该代码使用texture2DRect(和samplerRect),因此使用GL_TEXTURE_RECTANGLE_ARB纹理目标,该目标使用未标准化的纹理坐标,范围为[0,width] x [0,height]。

这就是为什么您拥有“怪异”纹理坐标的原因。不用担心,它们可以在此纹理目标下正常工作。

关于opengl - 为什么此OpenGL着色器使用超过1.0的纹理坐标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6735631/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com