我正在尝试在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 的幂
- 图片已经加载
有人可以告诉我在哪里挖掘这个问题吗?