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

时间:2018-03-08 02:30:47

标签: c++ opengl textures shader

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

我需要以这样一种方式生成我的mipmap,它始终使用texel的值获得最大alpha值。

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

我怎样才能做到这一点?

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

编辑:

我的问题是,更明确地说:

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

1 个答案:

答案 0 :(得分:2)

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