2012-11-09 4 views
6

位置がすべてのオブジェクトの背後にある場合でも、Three.jsでメッシュを常にシーンの上にレンダリングすることは可能ですか?私はメッシュを使用してラッセルの選択を実装しているので、残りのシーンの上に選択ボックスをレンダリングする必要があります。Three.js - ジオメトリが別のものの上にある

答えて

19

はい。そして、あなたが上になりたいだけのオブジェクトが含まれている2番目のシーンを作成

renderer.autoClear = false; 

最初にこれを行います。その後、自分の中でループをレンダリング:

renderer.clear();      // clear buffers 
renderer.render(scene, camera);  // render scene 1 
renderer.clearDepth();    // clear depth buffer 
renderer.render(scene2, camera); // render scene 2 

EDIT:メッシュが単一の材料を持っている

mesh.renderOrder = 999; 
mesh.onBeforeRender = function(renderer) { renderer.clearDepth(); }; 

場合、それは以下となります。別の解決策は、ただ一つのシーンを持っていますが、このパターンを使用することです"上に"描画する。

three.js r.85

+1

これが唯一の方法ですか?私はmesh.renderDepth、material.depthTest、material.depthWriteで同じ効果を得ようとしていましたが、役に立たなかったのです。 – Andrew

+0

@Andrew質問がある場合は投稿を作成してください。 – WestLangley

+0

@Andrewは今同じことをしようとしています。http://stackoverflow.com/questions/16247280/force-a-sprite-object-to-always-be-in-front-of-skydome-objectin -three-js – sixFingers

0

あなたが前面に一つだけのメッシュをレンダリングしたい場合もfalseに、そのオブジェクトの材料にdepthTestを設定することで管理できます。

var onTopMaterial = new THREE.MeshStandardMaterial({ 
    color: 'red', 
    depthTest: false 
}); 

mesh.material = onTopMaterial; 

は中demonstationをチェックthis fiddle


注:あなたは01を持っていることを確認してくださいはデフォルトのtrueの値に設定されています。

+0

これはいい考えではありません。落とし穴がたくさんあります。 1つは、青いキューブに 'transparent:true'を設定します。しかし、最大の問題は、 'depthTest = false'を設定することによって、いわゆる"トップメッシュ "はもはやそれ自身で深さテストされなくなり、レンダリングの成果物につながることです。 – WestLangley

+0

@ WestLangleyご意見ありがとうございます。透明な設定と競合することは私の場合は受け入れられますが、私は確かではありません。これをどうすればテストできますか?私は一時的にオブジェクトを 'mouseover'で他のオブジェクトの前に一時的に移動させ、' mousout'に戻す必要があります。このような場合、別のシーンに一時的に追加することは望ましくありません。 – Wilt

+0

非常に制限されたユースケースがない限り、私は受け入れられた答えのアプローチに従います。 – WestLangley

関連する問題