WebGL渲染到浮点纹理

phe*_*hen 5 floating-point render-to-texture webgl

我正在编写一些WebGL代码,需要渲染到浮点纹理.
通过扩展gl.getExtension('OES_texture_float');, gl.getExtension('OES_texture_float_linear');我现在能够创建和绘制此纹理并使用线性过滤器.
但它似乎没有正确计算.

基本上价值需要加在​​一起所以我正在使用

    gl.blendEquation(gl.FUNC_ADD);
    gl.blendFunc(gl.SRC_ALPHA, gl.ONE);
    gl.enable(gl.BLEND);
    gl.disable(gl.DEPTH_TEST);
Run Code Online (Sandbox Code Playgroud)

渲染到纹理时.也可能出现负值要添加.

现在经过几个小时的谷歌搜索后,我遇到了这个:WEBGL_color_buffer_float扩展

到目前为止,我正在使用该命令

    gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, rttFramebuffer.width, rttFramebuffer.height, 0, gl.RGBA, gl.FLOAT, null);
Run Code Online (Sandbox Code Playgroud)

但我想我需要RGBA32F改用.这有可能吗?如果可以,我该如何使用扩展格式?


已解决:正如答案所示,使用的格式没有错误.我为着色器制服分配了一些错误的值,并且确实使用了非常不利的背景颜色,导致错误的可视化.

gma*_*man 11

gl.getExtension('OES_texture_float_linear');不会给你浮点纹理.它使您能够对浮点纹理使用LINEAR过滤.gl.getExtension('OES_texture_float');使您能够创建浮点纹理.

至于这个

gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, rttFramebuffer.width, rttFramebuffer.height, 
              0, gl.RGBA, gl.FLOAT, null);
Run Code Online (Sandbox Code Playgroud)

这是正确的.WebGL中没有RGBA32F.它是由推断的gl.RGBA, gl.FLOAT

是的,这很愚蠢.这种疏忽在OpenGL ES 3.0中得到了修复,并将在WebGL 2.0中修复,但在当前的WebGL中,这就是你制作浮点纹理的方式.

  • 对于WebGL2,我必须将“OES_texture_float”替换为“EXT_color_buffer_float”,然后调用“gl.texImage2D( gl.TEXTURE_2D, 0, gl.RGBA32F, width, height, 0, gl.RGBA, gl.FLOAT, null )”。 (2认同)