如何基于最大值而不是默认合并创建 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?的主要内容,如果未能解决你的问题,请参考以下文章