我有一个3D纹理。每个纹素都包含alpha通道上的透明度值。
我需要以这样一种方式生成我的mipmap,它始终使用texel的值获得最大alpha值。
换句话说,如果有4个纹素3,透明度值为0,另一个透明度值为1,则生成的mipmap纹素应为1.
我怎样才能做到这一点?
如果我需要编写自己的着色器,那么最佳方法是什么?
编辑:
我的问题是,更明确地说:
我是否需要手动创建一个执行此操作的着色器,或者是否有办法使用opengl的内置函数来省去麻烦?
答案 0 :(得分:2)
为了做到这一点,你需要使用自定义着色器渲染每个mipmap的每一层,该着色器从上层计算最多8个样本。
这可以通过将渲染的mipmap的每一层附加到帧缓冲区(使用glFramebufferTexture3D
)来完成,并且在着色器中,使用texelFetch
(lod
参数指定来自相同纹理的采样要从中抽样的mipmap。