頭のてっぺんから
- 6つのfboを作成します。
- 各fboが、レンダーバッファではなく、テクスチャアタッチメントで作成されていることを確認してください。
- 6つのシーンを6つのfboにレンダリングします
- テクスチャごとにgl.generateMipmap(...)を呼び出します
- 6つのテクスチャを取得し、バイアスオプションを指定したtexture2Dを使用してそれらを平均化するシェーダーを作成します。テクスチャのレベル数にバイアスを設定します。これは、GPUに最小レベルを使用するように指示するためのものです。
- そのシェーダーを使用してユニットクワッドを1ピクセルfbo(またはバックバッファーの1ピクセル)にレンダリングします。
- その1ピクセルでgl.readpixelsを呼び出します。
シェーダーはこんな感じになると思います
-フラグメントシェーダー--
precision mediump float;
uniform sampler2D u_textures[6];
uniform float u_bias;
void main() {
// since we know we are rendering only with the last mip
// then there is only 1 texel.
vec2 center = vec2(0.5, 0.5);
vec4 sum =
texture2D(u_textures[0], center, u_bias) +
texture2D(u_textures[1], center, u_bias) +
texture2D(u_textures[2], center, u_bias) +
texture2D(u_textures[3], center, u_bias) +
texture2D(u_textures[4], center, u_bias) +
texture2D(u_textures[5], center, u_bias);
gl_FragColor = sum / 6.0;
}