2012-11-09 11 views
6

Czy w przypadku Three.js można wyświetlać siatkę zawsze wyświetlaną na górze sceny, nawet jeśli jej pozycja znajduje się za wszystkimi obiektami? Wprowadzam wybór lasso z siatką i muszę wyrenderować pole wyboru na górze reszty sceny.Three.js - Geometria na wierzchu innego

Odpowiedz

19

Tak.

Pierwszy to zrobić:

renderer.autoClear = false; 

Następnie utworzyć drugą scenę, która zawiera tylko te obiekty, które mają być na szczycie. Następnie w renderowanie pętlę:

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

EDIT: Innym rozwiązaniem jest mieć tylko jedną scenę, ale korzystać z tego wzoru:

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

Jeżeli siatka ma pojedynczy materiał, to będzie renderuj "na wierzchu".

Three.js r.85

+1

Czy to jedyny sposób? Próbowałem osiągnąć ten sam efekt za pomocą mesh.renderDepth, material.depthTest i material.depthWrite, ale bezskutecznie. – Andrew

+0

@Andrew Proszę napisać, jeśli masz pytanie. – WestLangley

+0

@Andrew próbuje zrobić to samo teraz, patrząc na http://stackoverflow.com/questions/16247280/force-a-sprite-object-to-always-be-in-front-of-skydome-object-in -three-js – sixFingers

0

Jeśli chcesz uczynić tylko jedno oczko z przodu można również zarządzać poprzez ustawienie depthTest dla materiału tego obiektu false:

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

mesh.material = onTopMaterial; 

Sprawdź demonstation w this fiddle


Uwaga: Sprawdź, czy masz renderer.sortObjects ustawiono domyślną wartość true.

+0

To _nie jest to dobry pomysł. Istnieje wiele pułapek. Po pierwsze ustaw 'transparent: true' na niebieskich sześcianach. Ale największym problemem jest to, że ustawiając 'depthTest = false', tak zwana" on top mesh "nie będzie już sama sprawdzać głębi, co może prowadzić do renderowania artefaktów. – WestLangley

+0

@WestLangley Dzięki za twoją opinię. To, że jest w konflikcie z przejrzystymi ustawieniami, jest w moim przypadku do przyjęcia, ale o artefaktach nie jestem pewien. Jak to przetestować? Muszę tymczasowo przesunąć obiekt przed wszystkimi innymi na 'mouseover' i z powrotem na' mousout'. Wydaje mi się, że dodanie go tymczasowo do innej sceny nie jest pożądane w takim przypadku. – Wilt

+0

Podejrzewam podejście w zaakceptowanej odpowiedzi, chyba że masz bardzo ograniczony przypadek użycia. – WestLangley

Powiązane problemy