具有透明度mipmappable的WebGL纹理?打开mipmapping时变为不透明

时间:2014-01-14 17:03:07

标签: webgl transparency mipmaps

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

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

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

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

我错过了哪些知识?

1 个答案:

答案 0 :(得分: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 mips中不支持两个维度中不是2的幂的纹理。