简单的问题是 - gl.LINEAR_MIPMAP_NEAREST
和gl.NEAREST_MIPMAP_LINEAR
之间有什么区别吗?我已经使用了第一个,结果不好(见下文)并在网上找到了第二个。有趣的是,两者都是定义的(在Chrome中),我想知道他们的区别是什么。
真正的问题是 - 如果我有一个透明的纹理图集(包含字形),我可以使用mipmapping吗?当缩放到小尺寸时,字形闪烁,我想通过mipmapping消除。
但是,当我启用mipmapping(仅将TEXTURE_MIN_FILTER
从LINEAR
更改为LINEAR_MIPMAP_NEAREST
,之后调用generateMipmap()
)时,透明度完全消失,整个纹理变成黑色。
据我所知,mipmapping可能会导致黑色墨水渗入透明区域,但不会在所有mipmap级别(包括原始大小)填充整个纹理。
我错过了哪些知识?
答案 0 :(得分: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.LINEAR
切换到gl.LINEAR_MIPMAP_NEAREST
来使用mips将不起作用,因为在WebGL mips中不支持两个维度中不是2的幂的纹理。