2017-05-03 8 views
0

Libgdxの3Dモデルの一部を別のモデルでマスクまたはトリミングする必要があります。添付されたイメージを仮定すると、オンザフライで赤色の緑色のボックスを切り取る必要がある2つのボックスがあります(カメラビューが変更された場合、特定の部分も切り取られる必要があります)。結果は他のイメージと同じになります。助けや提案をいただければ幸いです。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

ありがとうございました!私はライブラリをチェックしましたが、それはステンシルバッファと深さバッファが2D空間に使用できるようです。 –

関連する問題