Это может быть больше похоже на сделку типа "вам придется проделать долгий путь", но здесь все идет ...
Когда я применяю CSS для управления непрозрачностью только одного HTML-элемента, который является контейнером сцены Three.JS, в которой есть несколько элементов, каждый из которых является контейнером для своей собственной сцены, применяется CSS (даже в строке уровень) только к одному из тех элементов, которые содержат сцену, применяются ко всем элементам, которые содержат сцену, а не только к целевому. Это происходит с любым атрибутом CSS, применяемым после публикации, а не только с непрозрачностью.
Причина, по которой я пытаюсь использовать этот подход для контроля непрозрачности таким образом, заключается в том, что в моем исследовании не было прямого способа установить непрозрачность для группового объекта Three.JS, который содержит от 1 до N сеток. Я (в теории) пытаюсь не определять все материалы с прозрачностью, установленной на "true", а затем мне приходится делать рекурсивные обновления для всех сеток в объекте Three.JS Group, где анимация будет исчезать / исчезать.
Некоторые из групповых объектов, с которыми я работаю, будут иметь много сеток, определенных в них. Таким образом, вместо того, чтобы обновлять непрозрачность каждой отдельной сетки, содержащейся в объекте группы Three.JS, моей целью было / нужно, чтобы отдельные сцены для каждого типа анимации могли обеспечить любую прозрачность, примененную к ней, как есть. затем просто настройте HTML-элемент, содержащий свойство opacity этой анимации.
Я пытался использовать одну камеру и несколько камер, но безрезультатно. Я также попытался вложить контейнеры в один дополнительный элемент и установить CSS для родительского элемента, но возникает та же проблема. Я не пробовал использовать несколько средств визуализации, так как из того, что я собираю в исследованиях, я считаю, что это не одобряется и может привести к проблемам с производительностью и ограничению контекста. В цикле рендеринга также установлено значение «autoClear», равное false, чтобы все сцены отображались вместе.
Вот синтаксис HTML. Вы заметите, что первый элемент имеет встроенный стиль для непрозрачности, установленный на 0,5, а второй элемент не имеет встроенного стиля:
<div class="three-js-container" id="scene-container-1" style="opacity:0.5;"></div>
<div class="three-js-container" id="scene-container-2"></div>
Вот код Javascript:
/* Only one renderer instance is created */
var universalRenderer = new THREE.WebGLRenderer({antialias: true, alpha:true});
/* references to all containers are made */
var containerForScene1 = document.getElementById("scene-container-1");
var containerForScene2 = document.getElementById("scene-container-2");
/* two different cameras are created */
var cameraForScene1 = new THREE.PerspectiveCamera(50, window.innerWidth / window.innerHeight, 0.001, 1000);
var cameraForScene2 = new THREE.PerspectiveCamera(50, window.innerWidth / window.innerHeight, 0.001, 1000);
/* two different scenes are created, one for each element container */
var scene1 = new THREE.Scene();
scene1.userData.element = containerForScene1;
var scene2 = new THREE.Scene();
scene2.userData.element = containerForScene2;
/* the renderer is applied to both scene containers */
containerForScene1.appendChild(universalRenderer.domElement);
containerForScene2.appendChild(universalRenderer.domElement);
Когда воспроизводятся обе анимации, обе сцены отображаются с непрозрачностью 1/2, а не только с первой сценой.
Есть ли причина, по которой стили CSS, применяемые к одной HTML-сцене, содержащей элемент, применяются ко всем другим сценам, содержащим элементы? Должен ли я просто смириться с этим и пройти долгий путь в контроле прозрачности сетки?
Спасибо.