0

OES_texture_float 拡張機能の使用方法 関数 texImage2D に引数を指定する必要があることがわかりません。

var fb=gl.createFramebuffer();
gl.bindFramebuffer(gl.FRAMEBUFFER, fb);

var rb=gl.createRenderbuffer();
gl.bindRenderbuffer(gl.RENDERBUFFER, rb);
gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_COMPONENT16,size[0],size[1]);
gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT,gl.RENDERBUFFER, rb);

var texture=gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, texture);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, size[0], size[1],0, gl.RGBA, ???, ???);

gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0,gl.TEXTURE_2D, texture, 0);

「???」の代わりに書くべきこと

4

1 に答える 1

5

拡張機能が有効になっていると仮定すると、そのgl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, size[0], size[1],0, gl.RGBA, gl.FLOAT, null);

ただし、大きな警告があります。OES_texture_float拡張機能は、浮動小数点テクスチャにレンダリングできることを保証しません。これは、浮動小数点テクスチャを作成して読み取ることができることを意味します。float にレンダリングできる実際の拡張子はWEBGL_color_buffer_floatです。ただし、ブラウザがサポートしている場合、ブラウザはこの拡張機能を表示する必要はありません。だからあなたはしなければならない

if (gl.checkFramebufferStatus(gl.FRAMEBUFFER) !== gl.FRAMEBUFFER_COMPLETE){
    // cant render
}

テクスチャを FBO にアタッチした後、実際にフロート テクスチャにレンダリングできるかどうかを確認します。

OES_texture_float出典:拡張機能をサポートしているにもかかわらず、IEで機能しない理由を理解するのに何時間も費やしました。

また、2015 年 8 月の時点でほとんどのモバイル デバイスで利用できない拡張機能gl.LINEARも有効にしない限り、浮動小数点テクスチャでフィルタリングを使用できないことに注意してください。OES_texture_float_linear

于 2015-08-12T19:51:35.007 に答える