当前位置: 首页 > 知识库问答 >
问题:

在着色器中访问时,OpenGL如何决定使用MAG_过滤器和MIN_过滤器?

严劲
2023-03-14

使用glTexParamteri配置OpenGL时(GL_Texture_2D、GL_Texture_MAG_FILTER等)和glTexParamteri(GL_纹理_2D,GL_纹理_MIN_过滤器,…)在使用纹理(…)访问着色器中的纹理时,OpenGL如何决定使用哪个过滤器?

我唯一的猜测是它正在计算像素足迹,但由于您可以在片段或顶点着色器中访问纹理,它无法知道在哪个基元上投影了什么纹理。

共有2个答案

曹原
2023-03-14

一些(即:大多数)GLSL纹理访问函数表示它们需要“隐式导数”。所有这些功能只能完全起作用:

>

在FS的均匀控制流内。

如果在非片段着色器中调用需要隐式导数的纹理访问函数,则它将仅从基本mipmap级别访问。但是,如果您在片段着色器中,但在统一控制流之外,则所有此类函数都具有未定义的行为。

因此,如果您不在片段着色器中,您要么想从基本mipmap级别访问(在这种情况下,MAG_FILTER适用),要么想使用显式提供用于执行插值的值的函数:Lod(您明确表示从哪个mipmap级别获取),Grad(您明确指定用于决定像素占用位置的派生),或任何texelFetchtexture Gather函数(根本不进行插值)。

滑乐逸
2023-03-14

我唯一的猜测是它在计算像素足迹

是的,它就是这样做的。它将通过计算文本对窗口空间xy方向的导数来近似纹理空间中的像素足迹,并将通过在2x2像素四边形中的有限差分来近似这些导数,就像dFdxdFdyGLSL函数一样工作。它将使用两个偏导数向量中较长的一个作为大小,并在此基础上计算Level of-Detail值。

但是,由于可以在片段或顶点着色器中访问纹理,因此无法知道在哪个基本体上投影了什么纹理。

正确,这就是为什么GLSL规范(4.60版)在第8.9节纹理函数的开头声明如下:

纹理查找功能在所有着色阶段都可用。但是,仅为片段着色器计算自动细节级别。其他着色器的操作就好像基本细节级别被计算为零一样

 类似资料:
  • 我正在使用Servlet过滤器来实施访问控制。扩展it以测试用户角色的最佳方式是什么?我能想出几种解决方案,但没有一种是优雅的。 编写角色测试并不难。但是如何将角色传递给给定url的过滤器? e、 在网络上。xml 谢谢

  • 问题内容: 我的应用程序中有2个过滤器。根据某些条件,我想选择是否执行第二个过滤器。有没有办法做到这一点? 我做了一些谷歌搜索,但没有成功。我希望请求继续执行而不执行第二个过滤器。那可能吗? 任何帮助将不胜感激。 问题答案: 您可以在请求中设置一个属性,然后在第二个过滤器中对其进行检查。 您可以像这样简化上面的代码: 这样,您只需检查属性“ executeSecondFilter”的存在

  • 本文向大家介绍详解AngularJS中$filter过滤器使用(自定义过滤器),包括了详解AngularJS中$filter过滤器使用(自定义过滤器)的使用技巧和注意事项,需要的朋友参考一下 1.内置过滤器 2.自定义过滤器     套用上面的格式定义两个简单的自定义过滤器一个带条件的,一个不带条件的。 (1)【不带条件】,功能:固定转换(有时候项目中会遇到角色代号,门店编码什么的,但是显示的时候

  • 问题内容: 我写了一个过滤器函数,它将根据您传递的参数返回数据。我希望控制器具有相同的功能。是否可以在控制器中重用过滤器功能? 到目前为止,这是我尝试过的: 问题答案: 将 $ filter 注入控制器 然后,无论您想在哪里使用该过滤器,都可以像这样使用它: 如果要将参数传递给该过滤器,请使用单独的括号进行处理: 您要过滤的数组在哪里,并且是用于过滤的对象。

  • 如何使用java8流和过滤器过滤嵌套循环? 假设我有一个汽车列表(

  • 问题内容: 我想在过滤器中向后端请求并返回请求的结果。问题是服务$ http返回一个承诺,这就是问题。 对于存在的问题,我用$超时和角度在我的小提琴的承诺: 我的小提琴 在我的过滤器中,我使用带有承诺的$ timeout,但是最终目标是使用请求http: }); 然后在我看来,我使用了我的过滤器,该过滤器假定以2秒的延迟显示“ ca marche”,但这不起作用: 您会看到过滤器不返回任何内容,并