Javascript 无论我在其中输入了什么数据,纹理都是黑色的

Javascript 无论我在其中输入了什么数据,纹理都是黑色的,javascript,webgl,Javascript,Webgl,我尝试将数据放入片段着色器中,通过纹理为2个三角形着色,但给定的颜色是黑色(可能是默认值?),而不是预期的绿色或红色 我试图这样做的来源是。我把所有的东西都放在我的源代码中,我想如果我把一个绿色的像素和一个红色的像素放在我的纹理中,那么它需要有一个不同于黑色的颜色,但它是黑色的 这就是片段着色器: precision mediump float; uniform sampler2D u_texture; void main() { vec2 texcoord = vec2(0.5, 0

我尝试将数据放入片段着色器中,通过纹理为2个三角形着色,但给定的颜色是黑色(可能是默认值?),而不是预期的绿色或红色

我试图这样做的来源是。我把所有的东西都放在我的源代码中,我想如果我把一个绿色的像素和一个红色的像素放在我的纹理中,那么它需要有一个不同于黑色的颜色,但它是黑色的

这就是片段着色器:

precision mediump float;

uniform sampler2D u_texture;

void main() {
   vec2 texcoord = vec2(0.5, 0.5)  // get a value from the middle of the texture
   gl_FragColor = texture2D(u_texture, texcoord);
}
在那里,我创建了纹理,并将数据放入其中

var tex = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, tex);
var level = 0;
var width = 2;
var height = 1;
var data = new Uint8Array([
   255, 0, 0, 255,   // a red pixel
   0, 255, 0, 255,   // a green pixel
]);
gl.texImage2D(gl.TEXTURE_2D, level, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, data);

我试图用其他颜色在纹理中添加不同的数据,但结果是一样的。

必须将纹理缩小功能设置为“非mipmap”过滤器,否则纹理不完整。e、 g:

gl.texParameteri(gl.TEXTURE\u 2D,gl.TEXTURE\u MIN\u过滤器,gl.LINEAR);
默认情况下,缩小参数为
最近的\u MIPMAP\u线性
。此参数值需要纹理的mipmap才能完成

另一个选项是通过以下方式生成mipmap:

gl.generateMipmap(gl.TEXTURE_2D)
但是,纹理的宽度和高度必须是二的幂(对于WebGL 1.0)。看


注意,如果纹理未完成mipmap,则texel提取的返回值为(0,0,0,1),这将导致“黑色”颜色。

谢谢!该页面上没有说明mipmap,因此您的答案很有帮助!在WebgL1中没有未定义。ES 2.0规范第3.8.2节规定,如果未完成mipmap,则它们将为0,0,0,1等。。。