【发布时间】:2014-08-06 10:27:25
【问题描述】:
我正在尝试在three.js 纹理中使用 mipmaps 生成。
创建纹理时,我将大小为 512x512 的图像分配给 mipmaps[0]。
因此,如果我的理解是正确的,WebGL 应该使用这个图像来生成更小的 mipmaps 纹理。但随后我看到呈现黑色纹理并出现如下错误:
in chrome
WebGL:drawElements:绑定到纹理单元 0 的纹理不是 可渲染。它可能不是 2 的幂并且具有不兼容的纹理 过滤或不是“纹理完整”。或者纹理是 Float 或 具有线性滤波的半浮点型,而 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 的幂
- 图片已加载
谁能告诉我在哪里挖掘这个问题?
【问题讨论】:
-
据我所知,它已经为您生成了 mipmap,您无需显式设置 mipmaps 数组。设置可能会破坏它。
-
是的,我理解我的错误。渲染后我对空纹理的 mipmaps 数组感到困惑,并决定 mipmaping 不起作用。实际上它应该是空的,因为 webgl 不会返回生成的图像堆栈。
标签: javascript three.js webgl mipmaps