Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.07.2018, 18:32
Интересующийся
Отправить личное сообщение для drakonolom Посмотреть профиль Найти все сообщения от drakonolom
 
Регистрация: 03.07.2018
Сообщений: 26

не анимируется второй рендерер - three.js
Всем привет!
Возник вопрос в ходе разработки:
На сайт нужно поместить вот такой вот "дымок" https://codepen.io/teolitto/pen/KwOVvL по бокам окна.
Я сделал вот что :


$(window).ready(function () {
    var camera2, scene2, renderer2,
        geometry2, material2, mesh2;

    init();
    animate();

    function init() {
        stats2 = new Stats();
        stats2.setMode(0);
        stats2.domElement.style.position = 'absolute';
        stats2.domElement.style.left = '0px';
        stats2.domElement.style.top = '0px';
        document.body.appendChild(stats2.domElement);

        clock = new THREE.Clock();


        renderer2 = new THREE.WebGLRenderer({ alpha: true }); //allows transparency for line 264
        renderer2.setSize( window.innerWidth, window.innerHeight );
        renderer2.setClearColor(0xff0000, 0);


        scene2 = new THREE.Scene();

        camera2 = new THREE.PerspectiveCamera( 150, window.innerWidth / window.innerHeight, 1, 10000 );
        camera2.position.z = 1000;
        camera2.filmOffset = 150;
        scene2.add( camera2 );

        geometry2 = new THREE.CubeGeometry( 200, 200, 200 );
        material2 = new THREE.MeshLambertMaterial( { color: 0xaa6666, wireframe: false } );
        mesh2 = new THREE.Mesh( geometry2, material2 );
        //scene.add( mesh2 );
        cubeSineDriver = 0;

        textGeo = new THREE.PlaneGeometry(300,300);
        THREE.ImageUtils.crossOrigin = ''; //Need this to pull in crossdomain images from AWS
        textTexture = THREE.ImageUtils.loadTexture('https://s3-us-west-2.amazonaws.com/s.cdpn.io/95637/quickText.png');
        textMaterial = new THREE.MeshLambertMaterial({color: 0x00ffff, opacity: 0, map: textTexture, transparent: true, blending: THREE.AdditiveBlending})
        text = new THREE.Mesh(textGeo,textMaterial);
        text.position.z = 800;
        scene2.add(text);

        light = new THREE.DirectionalLight(0xffffff,0.5);
        light.position.set(-1,0,1);
        scene2.add(light);

        smokeTexture = THREE.ImageUtils.loadTexture('https://image.ibb.co/g93LW8/Smoke_Element.png');
        smokeMaterial = new THREE.MeshLambertMaterial({color: 0xffffff, emisive: 0xffffff, map: smokeTexture, transparent: true});
        smokeGeo = new THREE.PlaneGeometry(300,300);
        smokeParticles = [];


        for (p = 0; p < 150; p++) {
            var particle2 = new THREE.Mesh(smokeGeo,smokeMaterial);
            particle2.position.set(Math.random()*500-250,Math.random()*500-250,Math.random()*1000-100);
            particle2.rotation.z = Math.random() * 360;
            scene2.add(particle2);
            smokeParticles.push(particle2);
        }

        document.body.appendChild(renderer2.domElement).setAttribute('id','smokeCanvas2');



    }

    function animate() {

        // note: three.js includes requestAnimationFrame shim
        stats2.begin();
        delta = clock.getDelta();
        requestAnimationFrame( animate );
        evolveSmoke();
        render();
        stats2.end();
    }

    function evolveSmoke() {
        var sp2 = smokeParticles.length;
        while(sp2--) {
            smokeParticles[sp2].rotation.z += (delta * 0.2);
        }
    }

    function render() {

        mesh2.rotation.x += 0.005;
        mesh2.rotation.y += 0.01;
        cubeSineDriver += .01;
        mesh2.position.z = 100 + (Math.sin(cubeSineDriver) * 500);
        renderer2.render( scene2, camera2 );
    }


});


$(window).ready(function () {
    var camera, scene, renderer,
        geometry, material, mesh;

    init();
    animate();

    function init() {
        stats = new Stats();
        stats.setMode(0);
        stats.domElement.style.position = 'absolute';
        stats.domElement.style.left = '0px';
        stats.domElement.style.top = '0px';
        document.body.appendChild(stats.domElement);

        clock = new THREE.Clock();

        renderer = new THREE.WebGLRenderer({ alpha: true }); //allows transparency for line 264
        renderer.setSize( window.innerWidth, window.innerHeight );
        renderer.setClearColor(0xff0000, 0);

        scene = new THREE.Scene();

        camera = new THREE.PerspectiveCamera( 150, window.innerWidth / window.innerHeight, 1, 10000 );
        camera.position.z = 1000;
        camera.filmOffset = 150;
        scene.add( camera );

        geometry = new THREE.CubeGeometry( 200, 200, 200 );
        material = new THREE.MeshLambertMaterial( { color: 0xaa6666, wireframe: false } );
        mesh = new THREE.Mesh( geometry, material );
        //scene.add( mesh );
        cubeSineDriver = 0;

        textGeo = new THREE.PlaneGeometry(300,300);
        THREE.ImageUtils.crossOrigin = ''; //Need this to pull in crossdomain images from AWS
        textTexture = THREE.ImageUtils.loadTexture('https://s3-us-west-2.amazonaws.com/s.cdpn.io/95637/quickText.png');
        textMaterial = new THREE.MeshLambertMaterial({color: 0x00ffff, opacity: 0, map: textTexture, transparent: true, blending: THREE.AdditiveBlending})
        text = new THREE.Mesh(textGeo,textMaterial);
        text.position.z = 800;
        scene.add(text);

        light = new THREE.DirectionalLight(0xffffff,0.5);
        light.position.set(-1,0,1);
        scene.add(light);

        smokeTexture = THREE.ImageUtils.loadTexture('https://image.ibb.co/g93LW8/Smoke_Element.png');
        smokeMaterial = new THREE.MeshLambertMaterial({color: 0xffffff, emisive: 0xffffff, map: smokeTexture, transparent: true});
        smokeGeo = new THREE.PlaneGeometry(300,300);
        smokeParticles = [];


        for (p = 0; p < 150; p++) {
            var particle = new THREE.Mesh(smokeGeo,smokeMaterial);
            particle.position.set(Math.random()*500-250,Math.random()*500-250,Math.random()*1000-100);
            particle.rotation.z = Math.random() * 360;
            scene.add(particle);
            smokeParticles.push(particle);
        }

        document.body.appendChild(renderer.domElement).setAttribute('id','smokeCanvas1');



    }

    function animate() {

        // note: three.js includes requestAnimationFrame shim
        stats.begin();
        delta = clock.getDelta();
        requestAnimationFrame( animate );
        evolveSmoke();
        render();
        stats.end();
    }

    function evolveSmoke() {
        var sp = smokeParticles.length;
        while(sp--) {
            smokeParticles[sp].rotation.z += (delta * 0.2);
        }
    }

    function render() {

        mesh.rotation.x += 0.005;
        mesh.rotation.y += 0.01;
        cubeSineDriver += .01;
        mesh.position.z = 100 + (Math.sin(cubeSineDriver) * 500);
        renderer.render( scene, camera );

    }



});


в общем вызвал два раза функцию построения canvas объекта, но проблема в том что анимируется только один объет, второй просто стоит на месте, но всё же так-же генерируется из этого куска кода. Посоветуйте правильное решение проблемы
Ответить с цитированием
  #2 (permalink)  
Старый 26.07.2018, 18:49
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

drakonolom,
Функции инициализации и анимации у вас два раза описываются под одними и теми же именами с разными внутренностями....
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
объединение функционала leaflet.js и three.js Trippal Библиотеки/Тулкиты/Фреймворки 1 07.09.2016 10:58
Как получить второй дочерний элемент, или второй смежный libinstyle Events/DOM/Window 4 30.06.2010 20:41