2014-01-14 65 views
0

简单的问题是 - gl.LINEAR_MIPMAP_NEARESTgl.NEAREST_MIPMAP_LINEAR之间是否有区别?我用了第一个,结果不好(见下文),并在网络上找到第二个。有趣的是,两者都是定义的(在Chrome中),我不知道它们有什么不同。具有透明度mipmappable的WebGL纹理?打开mipmapping时打开不透明

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

但是,当我打开纹理映射(仅改变从LINEARTEXTURE_MIN_FILTERLINEAR_MIPMAP_NEAREST,并呼吁generateMipmap()之后),透明度完全消失,整个质感变为黑色。

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

我错过了什么样的知识吗?

回答

0

From the docs

GL_NEAREST

返回被纹理化的最接近纹理元件与像素的中心的值(在曼哈顿距离)。

GL_LINEAR

返回最接近的像素的中心被纹理化的四个纹理元件的加权平均。

GL_NEAREST_MIPMAP_NEAREST

会选择与像素的尺寸最紧密地匹配被纹理化,并使用GL_NEAREST标准(纹理元件最接近的像素的中心),以产生一个纹理值的纹理贴图。

GL_LINEAR_MIPMAP_NEAREST

]选择最紧密地匹配的像素是带纹理的大小,以及使用GL_LINEAR准则(即最接近于该像素的中心处的四个纹理元件的加权平均的mip映射)来产生纹理值。

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的幂的纹理。

+0

格雷格,再次,你让我的一天!愿两位的力量与你同在 - 谢谢! – virtualnobi