如何基于最大值而不是默认合并创建 mipmap?

Posted

技术标签:

【中文标题】如何基于最大值而不是默认合并创建 mipmap?【英文标题】:How to create mipmaps based on maximum value rather than default merging? 【发布时间】:2018-03-08 02:30:47 【问题描述】:

我有一个 3D 纹理。每个纹素在 Alpha 通道上都包含一个透明度值。

我需要以这样一种方式生成我的 mipmap,它始终采用具有最大 alpha 值的纹素值。

换句话说,如果有 4 个纹理像素 3 的透明度值为 0,而一个纹理像素的透明度值为 1,则生成的 mipmap 纹理像素应为 1。

我怎样才能做到这一点?

如果我需要编写自己的着色器,最好的方法是什么?

编辑:

我的问题,更清楚地说是:

我是否需要手动创建一个着色器来执行此操作,或者有没有办法使用 opengl 的内置函数来省去麻烦?

【问题讨论】:

"我怎样才能做到这一点?" 目前尚不清楚您在这里寻找什么样的答案。实现这一点的方法是编写代码来完成它。你问是否有预制的 OpenGL 解决方案?您是否需要 GPU 上的解决方案?这里有什么问题?此外,3D 纹理生成三个维度的 mipmap。因此,每个较低级别的 mipmap 代表来自较高层 mipmap 的 8 个 纹素,而不是 4 个。 ARB_texture_filter_minmax 【参考方案1】:

为此,您需要使用自定义着色器渲染到每个 mipmap 的每一层,该着色器从上层计算最多 8 个样本。 这可以通过将渲染的 mipmap 的每一层附加到帧缓冲区(使用 glFramebufferTexture3D)来完成,并且在着色器中,使用 texelFetch 从同一纹理中采样(lod 参数指定要从中采样的 mipmap) .

【讨论】:

以上是关于如何基于最大值而不是默认合并创建 mipmap?的主要内容,如果未能解决你的问题,请参考以下文章

mipmap到底有啥作用

用于图标的 Mipmap 可绘制对象

合并树中的零件是不是有最大“健康”大小?

如何使用 Alt+code 而不是默认 (ASCII) 字符输出我的字体字符?

Excel Power Query;如何合并值并转动问题

opengl 渲染纹理并在是不是使用 mipmap 之间切换