我正在尝试在 Firefox 的 WebGL 2.0 中加载一个简短的 3D 纹理。
虽然无符号 1 字节 3D 纹理加载没有任何问题,但我正在努力为任何其他像素类型做同样的事情。我的js代码:
var SIZE = 512;
var data = new Int16Array(SIZE * SIZE * SIZE);
data.fill(400);
var texture = gl.createTexture();
gl.activeTexture(gl.TEXTURE0);
gl.bindTexture(gl.TEXTURE_3D, texture);
gl.texParameteri(gl.TEXTURE_3D, gl.TEXTURE_BASE_LEVEL, 0);
gl.texParameteri(gl.TEXTURE_3D, gl.TEXTURE_MAX_LEVEL, 0);
gl.texParameteri(gl.TEXTURE_3D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_3D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
gl.texImage3D(
gl.TEXTURE_3D, // target
0, // level
gl.R16I, // internalformat
SIZE, // width
SIZE, // height
SIZE, // depth
0, // border
gl.RED_INTEGER, // format
gl.SHORT, // type
data // pixel
);
我没有在这个纹理上生成 mip 贴图。
当尝试在片段着色器中对纹理进行采样时,每个像素都得到 0。
FS 代码:
#version 300 es
precision highp float;
precision highp int;
precision highp sampler3D;
uniform sampler3D textureData;
in vec3 v_texcoord;
out vec4 color;
void main()
{
vec4 value = texture(textureData, v_texcoord);
if( value.x == 0.0 )
color = vec4(1.0, 0.0, 0.0, 1.0);
else if( value.x == 1.0)
color = vec4(1.0, 1.0, 0.0, 1.0);
else if( value.x < 0.0 )
color = vec4(0.0, 0.0, 1.0, 1.0);
else
color = vec4(1.0,1.0,1.0,1.0);
}
任何帮助,将不胜感激。