2017-05-03 65 views
0

需要用另一個模型掩蓋或裁剪Libgdx中3D模型的一部分。假設附加的圖片,有兩個箱子,我需要裁剪綠盒與即時紅色(如果攝像機視圖改變特定部分也應該被裁剪),結果應該像其他image.Any幫助或建議,將不勝感激。用Libgdx中的另一個模型掩蓋模型的一部分

two models

cropped model

+0

你忘了問一個問題,並提供你已經嘗試過的東西。看看:http://stackoverflow.com/help/how-to-ask。看看你的圖片,如果你改變紅色框的顏色爲黑色,它應該工作得很好。 – Xoppa

+0

謝謝Xoppa,但我已經問過如何使用另一個模型來裁剪模型的一部分。將紅框改爲黑色是個好主意,但我的問題並不那麼簡單!我將使增強現實應用的背景色變得透明;所以紅色的盒子也應該是透明的。 –

回答

0

我應用了深度緩衝區來掩蓋我的3D模型,它工作正常。這是我的代碼片段。

Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); 
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT); 
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
Gdx.gl.glClearDepthf(1f); 
Gdx.gl.glClear(GL20.GL_DEPTH_BUFFER_BIT); 
Gdx.gl.glDepthFunc(GL20.GL_LESS); 
Gdx.gl.glEnable(GL20.GL_DEPTH_TEST); 
Gdx.gl.glDepthMask(true); 
Gdx.gl.glColorMask(false, false, false, false); 

//the mask model 
modelBatch.begin(cam); 
modelBatch.render(redBox); 
modelBatch.end(); 

// the model which is masked 
modelBatch.begin(cam); 
Gdx.gl.glColorMask(true, true, true, true); 
Gdx.gl.glEnable(GL20.GL_DEPTH_TEST); 
Gdx.gl.glDepthFunc(GL20.GL_EQUAL); 
modelBatch.render(greenBox); 
modelBatch.end(); 

特別感謝Matt DesLauriers

0

我不知道libgdx但使用模板緩存(如果支持的話)可能是一個幫助。它是允許您用整數值標記特定像素的附加緩衝區,然後在主渲染過程中,您可以設置一些模板測試以決定丟棄哪些像素。

簡而言之:

  • 清潔模板緩衝區0
  • 只在模板緩衝區繪製紅色對象,具有值例如1
  • 設置模板測試,以「零」
  • 繪製綠色物體正常

這樣你畫綠箱子像往常一樣,但忽略它的模板像素!= 0,這意味着由所有遮擋紅色框。

+0

謝謝科倫達!我查庫,但它似乎模板緩存和可用於二維空間的深度緩衝。 –

相關問題