1

据我所知,可以使用Uint8阵列作为WebGL中的纹理。但如何通过Float32数组Float64数组到着色器有效吗?浮点值不在(0.0,1.0)范围内,也可能是负值。

我知道,有些设备不支持高精度浮子,如果在过程中丢失了一些精度,这不是问题。

1

1答案1

重置为默认值

尝试使用以下代码启用浮点纹理

var ext=gl.getExtension(“OES_texture_float”);if(!ext){警告(“对不起,没有浮点纹理”);回报;}

现在可以使用创建纹理Float32数组使用

gl.texImage2D(目标、级别、内部格式、宽度、高度、0、,格式,gl.FLOAT,someFloat32Array);

请注意,能够过滤浮点纹理是一个单独的扩展,因此如果需要过滤,也必须检查它

var ext=gl.getExtension(“OES_texture_float_linear”);if(!ext){警告(“对不起,无法过滤浮点纹理”);回报;}

否则,需要将纹理过滤设置为最近的

注意:在WebGL2中,默认情况下可以读取浮点纹理。但您使用内部类型全球RGBA32F。筛选仍然是可选的,因此您需要尝试启用OES_纹理_浮动_线性.

渲染到它们(将它们附加到帧缓冲区)。在WebGL1中,您需要检查WEBGL_color_buffer_float(WEBGL_颜色_缓冲区_浮动)。在WebGL2中,您需要检查EXT_颜色_缓冲区_浮动.

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.