0

gl.LINEAR_MIPMAP_NEAREST简单的问题是 -和之间有什么区别gl.NEAREST_MIPMAP_LINEAR吗?我使用了第一个,结果不好(见下文),并在网上找到了第二个。有趣的是,两者都是定义的(在 Chrome 中),我想知道它们的区别是什么。

真正的问题是 - 如果我有一个透明的纹理图集(包含字形),我可以使用 mipmapping 吗?当缩放到小尺寸时,字形闪烁,我想通过 mipmapping 消除。

但是当我打开 mipmapping(只改变TEXTURE_MIN_FILTERfrom LINEARto LINEAR_MIPMAP_NEAREST,然后调用generateMipmap())时,透明度完全消失了,整个纹理变成黑色。

我了解 mipmap 可能会导致黑色墨水渗入透明区域,但不会在所有 mipmap 级别(包括原始大小)上填充整个纹理。

我错过了什么知识?

4

1 回答 1

1

从文档

GL_NEAREST

返回最接近(在曼哈顿距离中)被纹理化的像素中心的纹理元素的值。

GL_LINEAR

返回最接近纹理像素中心的四个纹理元素的加权平均值。

GL_NEAREST_MIPMAP_NEAREST

选择最接近纹理像素大小的 mipmap,并使用 GL_NEAREST 标准(最接近像素中心的纹理元素)生成纹理值。

GL_LINEAR_MIPMAP_NEAREST

选择最接近纹理像素大小的 mipmap,并使用 GL_LINEAR 标准(最接近像素中心的四个纹理元素的加权平均值)生成纹理值。

GL_NEAREST_MIPMAP_LINEAR

选择最接近纹理像素大小的两个 mipmap,并使用 GL_NEAREST 标准(最接近像素中心的纹理元素)从每个 mipmap 生成纹理值。最终的纹理值是这两个值的加权平均值。

GL_LINEAR_MIPMAP_LINEAR

选择最接近纹理像素大小的两个 mipmap,并使用 GL_LINEAR 标准(最接近像素中心的四个纹理元素的加权平均值)从每个 mipmap 生成纹理值。最终的纹理值是这两个值的加权平均值。

至于为什么你的东西变黑了,你检查过 JavaScript 控制台是否有错误?最可能的原因是您的纹理在两个维度上都不是 2 的幂。如果是这种情况,尝试通过从gl.LINEARto切换来使用 mipsgl.LINEAR_MIPMAP_NEAREST将不起作用,因为在 WebGL 中 mips 不受支持的纹理在两个维度上都不是 2 的幂。

于 2014-01-15T01:44:08.803 回答