Возможно ли, чтобы в файле Three.js всегда отображалась сетка поверх сцены, даже если она находится позади всех объектов? Я реализую выбор лассо с сеткой, и мне нужно отобразить окно выбора поверх остальной части сцены.Three.js - Геометрия поверх другого
ответ
Да.
Во-первых это сделать:
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
Если вы хотите оказать только одна сетку на переднем вы также можете управлять установкой depthTest
для материала этого объекта false
:
var onTopMaterial = new THREE.MeshStandardMaterial({
color: 'red',
depthTest: false
});
mesh.material = onTopMaterial;
Проверить демонстрационный в this fiddle
Примечание: Убедитесь, что renderer.sortObjects
установлено значение по умолчанию true
.
Это не хорошая идея. Есть много подводных камней. Во-первых, установите «transparent: true» на синие кубы. Но самая большая проблема заключается в том, что, устанавливая 'depthTest = false', так называемая« верхняя сетка »больше не будет проверять глубину с самим собой, что может привести к рендерингу артефактов. – WestLangley
@WestLangley Спасибо за ваши отзывы. То, что оно конфликтует с прозрачными настройками, приемлемо в моем случае, но об артефактах я не уверен. Как проверить это? Мне просто нужно временно переместить объект перед всеми остальными на 'mouseover' и обратно на' mousout'. Мне кажется, что добавление его временно в другую сцену нежелательно в таком случае. – Wilt
Я бы следил за подходом в принятом ответе, если у вас нет очень ограниченного варианта использования. – WestLangley
- 1. THREE.js Геометрия - Исчезающая сторона
- 2. Three.js, пользовательская геометрия света
- 3. three.js дисплей геометрия имя
- 4. Экспериментальная геометрия буфера в Three.js?
- 5. Геометрия слияния Three.js очень медленная
- 6. three.js: пользовательская геометрия не будет текстурирована
- 7. three.js - геометрия рендеринга трубки в интервалах
- 8. three.js - объединенная геометрия не рендерит обновление
- 9. Изображение появляется поверх/поверх другого изображения?
- 10. Загрузить изображение поверх другого
- 11. Окно поверх другого окна
- 12. Один макет поверх другого?
- 13. Поместите изображение поверх другого
- 14. Vb.Net Объект поверх другого
- 15. элемент позиции поверх другого
- 16. укладка div поверх другого
- 17. изображение поверх другого CSS
- 18. Место элемент поверх другого
- 19. Окно поверх другого окна?
- 20. SSLSocket поверх другого SSLSocket
- 21. Элемент размещения поверх другого
- 22. JPanel поверх другого JPanel
- 23. Загрузить шаблон поверх другого
- 24. Pygame blit поверх другого?
- 25. Один контейнер поверх другого?
- 26. JLabel поверх другого JLabel
- 27. Как загрузить фильм поверх холста three.js
- 28. Геометрия повторного использования Three.js для faceColors и vertexColors
- 29. Пробовал интегрировать AngularJS и three.js, но геометрия не получается визуализироваться
- 30. Three.js: неверный свет на три. Геометрия + ЛамбертМатериалы сетки
Это единственный способ? Я пытался добиться такого же эффекта с помощью mesh.renderDepth, material.depthTest и material.depthWrite, но безрезультатно. – Andrew
@Andrew Пожалуйста, сделайте сообщение, если у вас есть вопрос. – WestLangley
@ Андрей пытается сделать то же самое прямо сейчас, глядя на http://stackoverflow.com/questions/16247280/force-a-sprite-object-to-always-be-in-front-of-skydome-object-in -three-js – sixFingers