2012-11-09 53 views
6

在Three.js中,網格總是呈現在場景的頂部,即使它的位置在所有對象後面嗎?我正在使用網格實現套索選擇,並且需要在場景的其餘部分上渲染選擇框。Three.js - 在另一個頂部的幾何

回答

19

是的。

首先做到這一點:

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 

編輯:另一個解決方案是隻有一個場景,但使用這種模式:

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-object-in -three-js – sixFingers

0

如果你想渲染只有一個正面目,您還可以通過該對象的材料設置depthTestfalse管理:

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

mesh.material = onTopMaterial; 

檢查一個示範開始在this fiddle


注:請確保您有renderer.sortObjects設置爲默認值true值。

+0

這不是一個好主意。有許多陷阱。首先,在藍色立方體上設置'transparent:true'。但最大的問題是,通過設置'depthTest = false',所謂的「頂部網格」將不再對其自身進行深度測試,這會導致渲染僞像。 – WestLangley

+0

@WestLangley感謝您的反饋。它與透明設置衝突在我的情況下是可以接受的,但對於我不確定的工件。我如何測試這個?我只需要暫時將一個對象放在'mouseover'上的所有其他對象的前面,然後回到'mousout'上。在我看來,暫時將它添加到不同的場景在這種情況下是不可取的。 – Wilt

+0

我會在接受的答案中遵循該方法,除非您的用例非常有限。 – WestLangley