2013-03-23 48 views
0

我正在使用從「開始安卓遊戲」採取的框架寫開放式gl 1.0的Android遊戲。Open GL ES - 紋理與阿爾法清除背景

我想繪製一些線條使用線條,其次是紋理多邊形。

但是,當我繪製紋理時,即使它們不在紋理塊附近,它也會首先繪製出線條的空白。

在長時間撞擊我的頭部之後,我發現如果我切換到沒有Alpha通道的圖像,它的工作原理並不會清除背景。但是如果我回到透明背景下的圖像,就會出現問題。

這是一張帶有一些截圖的圖片:http://imgbox.com/abxDKzSd 頂部的一個顯示了使用不帶alpha的圖像的屏幕,下面的圖像完全一樣,但圖像具有透明度。

  • 我看到活動開始時的線閃爍起來很簡單,但從未之後
  • 我使混合
  • 我的紋理尺寸爲2(128×32)
  • 我的權力每次通話後都檢查了gl錯誤,但沒有看到任何
  • 我直接在我的kindle fire HD上運行它,模擬器似乎根本無法使用。

這裏就是我在我的渲染圖元的代碼片段,然後我的紋理塊:

GL10 gl = glGraphics.getGL(); 
gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 
gl.glEnable(GL10.GL_TEXTURE_2D); 

m_guiCam.setViewportAndMatrices(); 

// draw the lines 
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); 
gl.glLineWidth(15.0f); 

m_vertices.position(0); 
gl.glVertexPointer(2, GL10.GL_FLOAT, VERTEX_SIZE, m_vertices); 
gl.glDrawArrays(GL10.GL_LINE_STRIP, 0, m_numVerts); 

// draw textures 
m_guiCam.setViewportAndMatrices(); 
gl.glEnable(GL10.GL_BLEND); 
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA); 

m_batcher.beginBatch(Assets.mfTex); 
TextureRegion keyFrame = Assets.mfAnim.getKeyFrame(0.0f, Animation.ANIMATION_LOOPING); 
m_batcher.drawSprite(250, 250, 32, 32, keyFrame); 
m_batcher.endBatch(); 

gl.glDisable(GL10.GL_BLEND); 

我做了我可以管理其仍表現出的問題最小的例子,它可在這裏:https://docs.google.com/folder/d/0Bz7e5tdnz97Id21XZkJoQ005NlU/edit?usp=sharing

任何人都可以幫我找出它爲什麼這樣做?我無法讓它工作!

回答

0

好的!最後想通了

原來我不得不後下降到移動

gl.glEnable(GL10.GL_TEXTURE_2D); 

電話我在那裏呈現我的臺詞。我只是在啓用混合後才放置它。 我也必須在繪製紋理精靈之後禁用紋理。因爲否則紋理會在它回來時仍然啓用,以便在下一幀再次渲染我的線條。

所以關於啓用紋理的東西足以破壞線條畫。 鈍了!

0

您需要禁用GL_DEPTH_TEST否則,如果您繪製的東西比某個已存在的東西高或相等,則不會顯示。

所以在你的情況下,添加gl.glDisable(GL10.GL_DEPTH_TEST)你啓用混合(並且當你不混合時再啓用它)。
您可能還需要在繪圖開始時清除深度緩衝區:gl.glClear(GL10.GL_COLOR_BUFFER_BIT|GL10.GL_DEPTH_BUFFER_BIT)

+0

感謝您的建議! 不幸的是,它仍然無法正常工作。 聽起來像是正確的答案,但我不確定它是如何解釋沒有alpha工作的紋理好嗎? – 2013-03-23 23:08:54