Floating point 浮点纹理的WebGL渲染

Floating point 浮点纹理的WebGL渲染,floating-point,webgl,render-to-texture,Floating Point,Webgl,Render To Texture,我正在编写一些WebGL代码,需要渲染为浮点纹理。 使用扩展名gl.getExtension('OES_texture_float')和gl.getExtension('OES_texture\u float\u linear')我现在可以创建和绘制此纹理并使用线性过滤器。 但它似乎没有被正确计算 基本上,值需要加在一起,所以我使用 gl.blendEquation(gl.FUNC_ADD); gl.blendFunc(gl.SRC_ALPHA, gl.ONE); gl.

我正在编写一些WebGL代码,需要渲染为浮点纹理。
使用扩展名
gl.getExtension('OES_texture_float')
gl.getExtension('OES_texture\u float\u linear')我现在可以创建和绘制此纹理并使用线性过滤器。
但它似乎没有被正确计算

基本上,值需要加在一起,所以我使用

    gl.blendEquation(gl.FUNC_ADD);
    gl.blendFunc(gl.SRC_ALPHA, gl.ONE);
    gl.enable(gl.BLEND);
    gl.disable(gl.DEPTH_TEST);
渲染到纹理时。也可能出现需要添加负值的情况

在谷歌搜索了几个小时后,我发现:

到目前为止,我使用的是命令

    gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, rttFramebuffer.width, rttFramebuffer.height, 0, gl.RGBA, gl.FLOAT, null);
但是我想我需要使用
RGBA32F
。这可能吗?如果可能,我如何使用扩展格式


已解决:如答案所示,使用的格式没有错误。我给着色器分配了一些错误的值,并且确实使用了非常不利的背景颜色,这导致了错误的可视化不提供浮点纹理。它使您能够对浮点纹理使用线性过滤<代码>gl.getExtension('OES_texture_float')使您能够创建浮点纹理

至于这个

gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, rttFramebuffer.width, rttFramebuffer.height, 
              0, gl.RGBA, gl.FLOAT, null);
没错。WebGL中没有RGBA32F。它由
gl.RGBA,gl.FLOAT


是的,这很愚蠢。这种疏忽在OpenGL ES 3.0中得到了修复,在WebGL 2.0中也将得到修复,但在当前的WebGL中,这是创建浮点纹理的方式。

哦,是的,我刚刚从代码中复制了错误的扩展名。感谢您对RGBA32F的关注。你知道为什么它不能正确绘制纹理吗?将浮动写入纹理时,混合似乎不起作用。对于WebGL2,我必须用
EXT\u color\u buffer\u float
替换
OES\u texture\u float
,然后调用
gl.texImage2D(gl.texture\u 2D,0,gl.RGBA32F,width,height,0,gl.RGBA,gl.float,null)
。嗨,如果您解决了问题,你能分享我们的解决方案(整个源代码)作为一个例子吗?