【问题标题】:What is the mipmapping and Power-of-Two error?什么是 mipmapping 和二次幂错误?
【发布时间】:2019-08-06 17:39:38
【问题描述】:

当我在 webGL 上设置图像的非电源时遇到此错误:

Error: WebGL warning: drawArrays: TEXTURE_2D at unit 0 is incomplete:         
Mipmapping requires power-of-two sizes.

注意,我目前正在学习 webGL。我注意到,当我使用二次方图像时,一切正常。

gl.bindTexture(gl.TEXTURE_2D, texture);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGB, gl.RGB, gl.UNSIGNED_BYTE, this);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);

我想做的就是学会在webgl上加载各种图片

【问题讨论】:

  • 您的gl.texImage_2D 通话中的this 是什么?它应该是一个图像。
  • this 是来自new Image();的图像

标签: webgl


【解决方案1】:

WebGL1 对非 2 次幂纹理有限制。他们不能有 mips,也不能重复。因此,要使用非 2 次幂纹理,您必须设置这些纹理参数

gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);

你也可以使用gl.NEAREST

有时你可以使用这样的代码

...
  gl.bindTexture(gl.TEXTURE_2D, texture);
  gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);

  // Check if the image is a power of 2 in both dimensions.
  if (isPowerOf2(image.width) && isPowerOf2(image.height)) {
     // Yes, it's a power of 2. Generate mips.
     gl.generateMipmap(gl.TEXTURE_2D);
  } else {
     // No, it's not a power of 2. Turn off mips and set wrapping to clamp to edge
     gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
     gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
     gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
  }

...

function isPowerOf2(value) {
  return (value & (value - 1)) == 0;
}

this article

【讨论】:

  • 谢谢,我错过了最后一行。 gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR)
猜你喜欢
  • 1970-01-01
  • 2011-08-29
  • 1970-01-01
  • 2010-12-09
  • 1970-01-01
  • 2010-11-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多