2014-12-08 81 views
1

目前正在從事視頻遊戲項目。OpenGL ES 2紋理圖集的流血邊緣

當我:

Matrix.orthoM(projectionMatrix, 0, 0, widthwindows, heightwindows, 0, -1, 3); 

一切正常。但是當變量widthwindows與現實屏幕分辨率不同時,我會得到這種效果。

enter image description here

我無法從其他題目使用參見前述的解決方案,因爲我的一些磚都是曲線或任何所以即使-0.5 pixel有對他們沒有影響,他們仍然可以得到透明度身邊(甚至有些瓷磚AREN不在64*64,但12*64爲例,所以-0.5 pixel不起作用)。

+0

我會嘗試禁用此地圖集上的mip映射,但這可能會導致其他問題,無論如何,你可以嘗試。 – 2014-12-11 13:34:09

+0

已經完成,沒有變化。在朋友的紋理圖集上使用gemserk過程後,我不知道如何啓動那個。它似乎不再透明的邊框,但我仍然得到它們時,我從左或右移動矩陣。例如,當我處於位置0和最大範圍時,我不會得到它們。所以2件事情,首先如果有人能幫我啓動:[鏈接](https://github.com/gemserk/imageprocessing),如果有人明白爲什麼當我移動矩陣縮放它總是出現? – disclique 2014-12-13 10:28:20

回答

1

您可能想要使用PMA(預乘Alpha)。 使用透明度繪製精靈時,您多次使用「正常」混合模式。 正常的混合模式將精靈的像素顏色乘以該像素的Alpha值,並將其添加到背景像素顏色中,並由源像素Alpha補充1。 然而,大多數情況下,這種方式在縮放和過濾精靈時會起作用,這可能會導致半透明像素比他們應該看起來更暗。

爲了解決這個問題你使用PMA。 由於在混合中你要將精靈的顏色與精靈的alpha相乘,你可以改爲存儲已經乘以它的alpha值的像素顏色。 現在,混合模式將如下所示...將PMA像素顏色(不用乘以alpha)添加到背景顏色乘以1的源像素阿爾法補碼。

在GLES 2的普通混合模式將是這樣的:

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 

的PMA混合模式將是這樣的:

glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); 

希望這能解決您的問題。