2012-07-31 115 views
1

我正在使用LibGDX繪製一個簡單的繪畫應用程序,並且無法使用我正在使用的安裝程序正確「繪製」。我嘗試這樣做的方法是使用精靈進行繪製,並在合適時使用LibGDX的FBO命令將這些單個精靈添加到背景紋理中。LibGDX - 使用FBO進行紋理貼圖

我遇到的問題是與混合有關的問題,因爲當將精靈添加到我正在構建的紋理中時,精靈的任何透明像素都將被繪製到之前的像素之上大幅度增加,顯然看起來不太好。以下是結果的外觀,使用帶有綠色>紅色漸變的圓圈作爲「畫筆」。最上面一行是現在背景紋理的一部分,而最下面一行仍然是純粹的精靈繪製形式。

http://i238.photobucket.com/albums/ff307/Muriako/hmm.png

基本上,每個精靈的透明區域增亮低於他們什麼,我需要讓他們完全透明的。我混淆了許多不同的混合模式組合,找不到更好的混合模式組合。例如GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA沒有這個問題,但是每個精靈的透明像素似乎在alpha中被降低,甚至從下面的圖層中取出一些顏色,這看起來更加惱人。

我很樂意根據要求發佈任何代碼片段,但是自從我開始嘗試解決這些問題後,我的代碼變得有點混亂,所以我寧願只根據需要提供必要的位。

回答

1

你在畫什麼樣的命令? Alpha混合只適用於已經在目標中的像素,因此您必須以Z順序繪製所有包含alpha的東西(以及「在它們後面」的所有東西)以獲得正確的結果。我正在使用.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);

+0

這些精靈按照它們放置的順序被繪製,所以它們總是在它之前添加的任何東西之上。我在原來的帖子中犯了一個小錯誤,我現在已經修正了這個錯誤,但是我使用了「GL_ONE,GL_ONE_MINUS_SRC_ALPHA」來獲得屏幕截圖中顯示的效果。使用你建議的相同混合模式,我可以在原始文章中看到我提到的效果,儘管之前它不正確。對不起,可能造成的任何混淆! – Cyanide 2012-07-31 21:57:38