【问题标题】:WebGL texture with transparency mipmappable? Turns opaque when mipmapping turned on具有透明度的 WebGL 纹理 mipmappable?打开 mipmapping 时变为不透明
【发布时间】:2014-01-15 09:44:08
【问题描述】:

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

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

但是当我打开 mipmapping(仅将 TEXTURE_MIN_FILTERLINEAR 更改为 LINEAR_MIPMAP_NEAREST,然后调用 generateMipmap())时,透明度完全消失了,整个纹理变黑了。

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

我错过了哪些知识?

【问题讨论】:

    标签: webgl transparency mipmaps


    【解决方案1】:

    From the docs

    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 中,不支持在两个维度上都不是 2 次幂的纹理。

    【讨论】:

    • 格雷格,你再一次让我开心!愿两人的力量与你同在 - 谢谢!
    猜你喜欢
    • 2013-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-23
    • 2016-03-01
    • 1970-01-01
    相关资源
    最近更新 更多