2017-05-03 31 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

谢谢科伦达!我查库,但它似乎模板缓存和可用于二维空间的深度缓冲。 –

相关问题