如何基于最大值而不是默认合并创建 mipmap?
How to create mipmaps based on maximum value rather than default merging?
我有一个 3D 纹理。每个纹素都包含 alpha 通道上的透明度值。
我需要以这样一种方式生成我的 mipmap,它始终采用具有最大 alpha 值的纹素值。
换句话说,如果有 4 个纹素 3 的透明度值为 0,一个纹素的透明度值为 1,则生成的 mipmap 纹素应为 1。
我怎样才能做到这一点?
如果我需要编写自己的着色器,最佳方法是什么?
编辑:
我的问题,说得更清楚一点是:
我是否需要手动创建一个着色器来执行此操作,或者有没有办法使用 opengl 的内置函数来省去麻烦?
为此,您需要使用自定义着色器渲染每个 mipmap 的每一层,该着色器从上层计算最多 8 个样本。
这可以通过将渲染的 mipmap 的每一层附加到帧缓冲区(使用 glFramebufferTexture3D
)来完成,并且在着色器中,使用 texelFetch
(lod
参数指定从同一纹理采样要从中采样的 mipmap)。
我有一个 3D 纹理。每个纹素都包含 alpha 通道上的透明度值。
我需要以这样一种方式生成我的 mipmap,它始终采用具有最大 alpha 值的纹素值。
换句话说,如果有 4 个纹素 3 的透明度值为 0,一个纹素的透明度值为 1,则生成的 mipmap 纹素应为 1。
我怎样才能做到这一点?
如果我需要编写自己的着色器,最佳方法是什么?
编辑:
我的问题,说得更清楚一点是:
我是否需要手动创建一个着色器来执行此操作,或者有没有办法使用 opengl 的内置函数来省去麻烦?
为此,您需要使用自定义着色器渲染每个 mipmap 的每一层,该着色器从上层计算最多 8 个样本。
这可以通过将渲染的 mipmap 的每一层附加到帧缓冲区(使用 glFramebufferTexture3D
)来完成,并且在着色器中,使用 texelFetch
(lod
参数指定从同一纹理采样要从中采样的 mipmap)。