简单的问题是gl.LINEAR_MIPMAP_NEAREST
和gl.NEAREST_MIPMAP_LINEAR
之间有什么区别吗?我使用了第一个,但结果不好(见下文),并在网上找到了第二个。有趣的是,两者都是(在Chrome中)定义的,我想知道它们的区别是什么
真正的问题是——如果我有一个透明的纹理图谱(包含字形),我可以使用mipmapping吗?当缩放到小尺寸时,字形会闪烁,我想通过mipmapping消除这种情况。
但是,当我打开mipmapping(仅将TEXTURE_MIN_FILTER
从LINEAR
更改为LINEAR_MIPMAP_NEAREST
,然后调用generateMipmap()
)时,透明度完全消失,整个纹理变黑。
我知道mipmapping可能会导致黑色墨水渗入透明区域,但不会在所有mipmap级别(包括原始大小)填充整个纹理。
我怀念什么知识?
从文档
GL_NEAREST
返回纹理元素的值,该值最接近(曼哈顿距离)要纹理的像素的中心。
GL_LINEAR
返回最靠近纹理像素中心的四个纹理元素的加权平均值。
GL_NEAREST_IPMAP_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.LINEAR
切换到gl.LINEAR_MIPMAP_NEAREST
来使用mip将不起作用,因为在WebGL中,mip不支持在两个维度上都不是2的幂的纹理。