2012-11-09 4 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 

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

@ Андрей пытается сделать то же самое прямо сейчас, глядя на http://stackoverflow.com/questions/16247280/force-a-sprite-object-to-always-be-in-front-of-skydome-object-in -three-js – sixFingers

0

Если вы хотите оказать только одна сетку на переднем вы также можете управлять установкой depthTest для материала этого объекта false:

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

Смежные вопросы