具有透明度的WebGL纹理mipmapable?启用mipmapping时将变为不透明



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

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

但是,当我打开mipmapping(仅将TEXTURE_MIN_FILTERLINEAR更改为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的幂的纹理。

最新更新