反走樣功能正如名稱所說的那樣:它可以防止原語假定別名,例如直線(對角線)變成樓梯。由於抗鋸齒通常會導致「軟」邊緣,因此該術語有時用於適用於任何算法的「軟化」,但這樣做不正確。
假設你的源紋理已經包含一些反鋸齒渲染你的汽車的曲面邊緣到一個像素網格(所以,如果你打開源PNG或任何藝術計劃和放大邊緣你會看到一些柔和),我認爲你的代碼無論出於何種原因都未能應用多重採樣。如果放大並觀察屋頂的頂部邊緣,則檢查右邊第一步的頂部和左邊的第一步之間的過渡。頂部的粗糙黑色只是自發地增加了一個像素。這是邊緣在原始紋理中的症狀,並且它被逐個像素地複製出來。
GL_LINEAR
是影響如何OpenGL的回答這樣的問題的濾波參數「如果在源像素(0,0)是在一種顏色和(0,1)是另一種則是在(0,0.5)什麼顏色? 「如果應用線性濾波,那麼當您將紋理縮放到原始大小以上時,將使用最近源像素的線性組合創建OpenGL必須發明的額外像素。如果您使用的是GL_NEAREST
,那麼它將是最接近的任何源像素的顏色。所以這就是紋理之間的區別,可以放大看起來模糊和低對比度,紋理可以放大看起來像鑲嵌有明顯像素的紋理。所以它(通常)爲整體圖像增加了模糊性和柔和性,但與抗鋸齒功能無關。
關於爲什麼你沒有得到反鋸齒,兩個可能的原因衝刺到腦海。您的代碼中可能存在一些錯誤,或者您可能只是使用了與Cocos2D不同的算法。蘋果公司的硬件多采樣支持僅在iOS 4中推出,並且Cocos2D可能會堅持一種'軟件'方法(具體來說,將整個場景按像素逐像素渲染爲4倍大小,然後讓GPU縮小)。後者會明顯較慢,但會阻止硬件嘗試優化該過程。有些硬件有時適用的一種優化方法是僅在幾何(幾乎)邊緣進行多重採樣。這顯然不會使你受益。
另一種可能性是,當您繪製時縮放圖像(雖然看起來不像),而Cocos2D生成的是mip貼圖,而您不是。當繪圖到屏幕時,Mip地圖會預先計算一定比例的圖像並從那裏開始工作。這樣做會允許應用更昂貴的算法,並趨於減少混疊。
你能發表一些代碼嗎?
出於興趣,你是否因爲好奇而學習OpenGL,或者有什麼你想做的事情,Cocos2D不能做? –
@Danyal,我也在學習OpenGL,但我想不惜一切代價避免使用cocos2d和objective c,因爲1)可移植性問題(避免使用目標c,因此我可以將代碼移植到android甚至webgl中)以及2)目標c會強加給我的語言障礙。我理解它的基本概念,但我真的不喜歡它的工作方式。 – Waneck
謝謝@Waneck,你可能會說我在想我是否應該學習它!順便說一下你看過Cocos2d-x嗎?它是帶有Android端口的Cocos2d的C++版本。但我想這不會沒有它特定於平臺的錯誤。 –