0

我正在尝试在three.js纹理中使用 mipmaps 生成。

创建纹理时,我将大小为 512x512 的图像分配给 mipmaps[0]。
因此,如果我的理解是正确的,WebGL 应该使用这个图像来生成更小的 mipmap 纹理。但后来我看到一个黑色的纹理渲染和这样的错误:

在 chrome

WebGL:drawElements:绑定到纹理单元 0 的纹理不可渲染。它可能不是 2 的幂并且具有不兼容的纹理过滤或不是“纹理完整”。或者纹理是具有线性过滤的浮点或半浮点类型,而 OES_float_linear 或 OES_half_float_linear 扩展未启用。

在火狐中

错误:WebGL:根据 OpenGL ES 2.0.24 规范第 3.8.2 节,纹理将被渲染为黑色,因为它是 2D 纹理,具有需要 mipmap 的缩小过滤器,而不是 mipmap完整(定义见第 3.7.10 节)。

创建纹理的代码如下所示:

var texture = THREE.ImageUtils.loadTexture( 'images/512.png', undefined, function() {
    texture.repeat.set( 1, 1 );
    texture.mipmaps[ 0 ] = texture.image;
    texture.generateMipmaps = true;
    texture.needsUpdate = true;
};

使用画布而不是图像的同样问题。

澄清:

  • 图像是 2 的幂
  • 图片已经加载

有人可以告诉我在哪里挖掘这个问题吗?

4

1 回答 1

3

问题解决了。我已经明白我的错误了。渲染后我对空纹理的 mipmaps 数组感到困惑,并决定 mipmaping 不起作用。事实上它应该是空的,因为 webgl 不返回生成的图像堆栈。

于 2014-08-06T12:04:44.850 回答