2014-01-14 96 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