Освещение сцены движущейся камерой

<html>
    <head>
        ...
    </head>
    <body>
        <script src="three.min.js"></script>
        <script>
            var scene = new THREE.Scene();
            var camera = new THREE.PerspectiveCamera( 75, window.innerWidth/window.innerHeight, 0.1, 1000 );

            var renderer = new THREE.WebGLRenderer();
            renderer.setSize( 600, 400 );
            document.body.appendChild( renderer.domElement );

            var geometry = new THREE.BoxGeometry( 2, 2, 2 );

            var material = new THREE.MeshLambertMaterial( { color: 0xffffff } );
            var material2 = new THREE.MeshLambertMaterial( { color: 0xff007b } );

            var cube = new THREE.Mesh( geometry, material );
            var cube2 = new THREE.Mesh( geometry, material2 );

            cube.position.set(0, 0, 0);
            cube2.position.set(-3, 0, 0);

            scene.add( cube );
            scene.add( cube2 );

            var render = function () {
                requestAnimationFrame( render );
                var directionalLight = new THREE.DirectionalLight( 0xffffff, 0.5 );
                directionalLight.position.set( -3, 3, 3 );
                scene.add( directionalLight );
                var timer = Date.now() * 0.001;
                camera.position.x = Math.cos( timer ) * 10;
                camera.position.z = Math.sin( timer ) * 10;
                camera.lookAt( scene.position );
                renderer.render(scene, camera);
            };

            render();
        </script>
    </body>
</html>

Я создаю кубы, и я хочу, чтобы они двигались по кругу, поэтому я перемещаю всю сцену по кругу, но у меня проблемы с освещением, потому что я думаю, что это также движется со сценой, и когда мы видим заднюю часть кубов, есть Нет света. Я использую эту библиотеку в первый раз, поэтому я даже не уверен, что должен использовать directionalLight, но я хочу, чтобы кубы, находящиеся ближе всего к зрителю, были освещены и стали темнее, когда они удаляются от зрителя. Может быть, свет должен быть статичным, и я не должен двигать камеру, но я не знаю, как это сделать, не перемещая каждый куб самостоятельно.

1 ответ

Решение

Во-первых, это плохая идея вращать всю сцену. Всю сцену ребенку будет очень сложно представить для будущей работы.

Создайте var space = new Object3D(); scene.add(space); space.add(your_cubes);

и повернуть space объект вместо scene, Положить light к scene и установить space как light.target,

light.target = space;

Другие вопросы по тегам