Я пытаюсь написать небольшую программу в Three.js, которая отображает две сферы, одну внутри другой. Радиус сферы 2 должен колебаться между 0,5 и 1,5, а радиус сферы 1 всегда равен 1,0. Каждая сфера прозрачна (непрозрачность: 0,5), чтобы можно было видеть меньшую сферу, содержащуюся в большей. Конечно, роли "меньшего" и "большего" изменения изменяются по мере изменения радиуса сферы2.
Теперь проблема заключается в том, что Three.js делает прозрачным первую сферу, которую я определяю в своей программе, но не вторую. Если я определяю первую сферу1, тогда она становится прозрачной, но затем сфера 2 полностью непрозрачна. Если я определяю первую сферу2, то это прозрачная. Порядок добавления их на сцену не играет никакой роли.
Я включаю ниже минимальную программу, которая показывает, что происходит (без анимации). В текущем состоянии видна только сфера1, и она не прозрачна. Если я определяю сферу 1 перед сферой 2, то сфера1 становится прозрачной, но сфера2 уже не прозрачна. Изменение радиуса сферы2 до 1,2 затем скроет сферу.
Есть ли способ сделать оба шара прозрачными?
var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera(75, window.innerWidth/window.innerHeight, 0.1, 1000);
camera.position.set(0, 0, 3);
camera.lookAt(new THREE.Vector3(0, 0, 0));
scene.add(camera);
var ambient = new THREE.AmbientLight( 0x555555 );
scene.add(ambient);
var light = new THREE.DirectionalLight( 0xffffff );
light.position = camera.position;
scene.add(light);
var renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
// Definition 2
var geometry2 = new THREE.SphereGeometry(0.8,32,24);
var material2 = new THREE.MeshLambertMaterial({color: 0x0000ff, transparent: true, opacity: 0.5});
var sphere2 = new THREE.Mesh(geometry2, material2);
// Definition 1
var geometry1 = new THREE.SphereGeometry(1.0,32,24);
var material1 = new THREE.MeshLambertMaterial({color: 0x00ff00, transparent: true, opacity: 0.5});
var sphere1 = new THREE.Mesh(geometry1, material1);
scene.add(sphere1);
scene.add(sphere2);
renderer.render(scene, camera);