2

2 つのシーンをレンダリングしようとしています。最初のシーンは単なる 2D 背景平面です。2 番目のシーンでは、オブジェクトに設定しました。最初のオブジェクト (頭) のマテリアルの不透明度は 1 に設定されています。シーン内の 2 番目のオブジェクト (サングラス) のオクルージョンを計算するには、これが簡単かつ迅速な方法だと思いました。実際、それは私が望んでいたのとまったく同じように機能しますが、透明であるべきにもかかわらず、頭も背景を遮っています。(2番目のシーンをレンダリングする前に深度バッファをクリアして設定しましたrenderer.autoClear = false

renderer.autoClear = false;
var headMaterial = new THREE.MeshBasicMaterial({ color: 0x000000, opacity: 1 });
...
//Renderloop
renderer.clear();
renderer.render( background, camera );
renderer.clear(false,true,false);
renderer.render( scene, camera);
4

2 に答える 2

0

すべてのオブジェクトを含む 1 つのシーンだけでなく、2 つのシーンをレンダリングする説得力のある理由はありますか? 彼らは同じカメラを共有していますよね?

最初に頭とサングラスをレンダリングしてみてください。ステンシルでサングラスをマスキングします。次に、ステンシル テストを使用して背景をレンダリングします (深度テストは行いません)。レンダリングする背景ピクセルが少なくなるため、全体的なレンダリングが少し速くなります。

于 2012-12-07T17:30:20.317 に答える
0

「背景」と言うのが、テクスチャが入った平面だけのシーンを意味する場合、背景を HTML 背景として設定しないのはなぜですか? つまり、画面のすべての領域を埋めるために飛行機の正しい位置を計算する必要はありません。

さて、透明性の問題について-ここにいくつかの例があります:http://jsfiddle.net/ajJmx/1/

キューブの前面が半透明に設定されていることを確認し、キューブの他の側面を見ることができます。そして、立方体を 45 度回転させると、背景に他のオブジェクトがあっても、固体の立方体の側面が固体のままであることがわかります。

基本的にやりたいことはtransparent:true, opacity:0.6、サングラスのマテリアルに設定することです。それでおしまい!素材のブレンドをいじって、blending:THREE.AdditiveBlendingサングラスのタイプに合わせて設定することもできます。

于 2012-12-09T00:11:16.973 に答える