我在cocos2d框架中使用opengl創建了一個填充紋理的多邊形。我已經使用PRKit(link)並修改了下面顯示的代碼的繪製方法。使用opengl的cocos2d中的透明PNG紋理iphone
glBlendFunc(GL_ONE, GL_ZERO);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glBindTexture(GL_TEXTURE_2D, self.texture.name);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
glVertexPointer(2, GL_FLOAT, 0, polyTriangulatedPoints);
glTexCoordPointer(2, GL_FLOAT, 0, textureCoordinates);
glDrawArrays(GL_TRIANGLES, 0, trianglePointCount);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
當我使用透明PNG紋理時,我得到了一個奇怪的結果。透明區域不是黑色,而是一些隨機的顏色與黑色。這是我用上面的代碼得到的輸出。
我必須保持glBlendFunc(GL_ONE,GL_ZERO),其是相同禁用共混。如果我不這樣做,cocos2d中的背景圖層會與我的紋理圖像一起添加,從而產生非常明亮的紋理。爲了添加更多的信息,我已經設置了紋理模式,以便所有圖像都加載了以下內容。 glDexImage2D(GL_TEXTURE_2D,0,GL_RGBA,width,height,0,GL_RGBA,GL_UNSIGNED_BYTE,data);
我的問題是,爲什麼我會在透明區域看到這種隨機顏色,以及如何解決這個問題?我有一種感覺,因爲我對opengl很陌生,所以我一定在做錯事。
我不知道如何使用這些信息來解決我的問題,因爲我沒有經驗的opengl,但我會看看GL_GREATER並做一些實驗。感謝您抽出時間回覆。 – maulik13
如果您使用的是opengl es 1.1,您可以在glDrawArrays之前添加以下命令:glAlphaFunc(GL_GREATER,0.0f); glEnable(GL_ALPHA_TEST); – Johnmph
啊我明白了。我現在在iPhone模擬器上運行這個代碼,所以我不確定它實際使用的是什麼版本的opengl。但我會試一試,看看它是如何工作的。謝謝:) – maulik13