Три js EffectComposer + BloomPass не работают

Не могу понять, что не так (особенно с тем, насколько недокументированы эти два файла .js), но я включил EffectComposer и BloomPass в свой проект и пытаюсь назвать это так:

parameters = { bloomStrength: 1.3, bloomFactor: 1.0,}

            var renderPass = new THREE.RenderPass(scene, camera);
            var copyPass = new THREE.ShaderPass(THREE.CopyShader);
            copyPass.renderToScreen = true;

            composer = new THREE.EffectComposer ( renderer );
            composer.addPass(renderPass);
            composer.addPass(copyPass);

            var effectBloom = new THREE.BloomPass ( 3, 25, 5, 256);
            composer.addPass (effectBloom);

BloomPass.js выдает ошибку сам по себе (не в моем коде), утверждая, что «Uncaught TypeError: не удается прочитать прототип свойства undefined в BloomPass.js: 76». Строка BloomPass 76 выглядит следующим образом:

THREE.BloomPass.prototype = Object.assign( Object.create( THREE.Pass.prototype ), {

Я считаю, что из-за этого EffectComposer также выдает ошибку для строки composer.addPass(effectBloom);: Uncaught TypeError: pass.setSize не является функцией в THREE.EffectComposer.addPass

pass.setSize( size.width, size.height );

Любая идея, что я делаю неправильно? Судя по нескольким примерам, я все настраиваю правильно... Любая помощь приветствуется!


person Turkeydipking    schedule 20.02.2017    source источник
comment
Также стоит упомянуть, что если я закомментирую все эти строки в своем коде и запущу его, BloomPass.js все равно выдаст эту ошибку, заставляя меня задуматься, что с ним не так?   -  person Turkeydipking    schedule 20.02.2017
comment
Вам будет намного проще помочь, если вы настроите скрипту. Вы можете разветвить эту скрипту, чтобы создать свою собственную.   -  person 2pha    schedule 20.02.2017


Ответы (1)


Вы должны поместить CopyShader в конец композитора, а не в середину. Этот код работает для меня:

    renderer.autoClear = false;
    composer = new THREE.EffectComposer(renderer);
    var sunRenderModel = new THREE.RenderPass(scene, camera);
    var effectBloom = new THREE.BloomPass(1, 25, 5);
    var sceneRenderModel = new THREE.RenderPass(scene, camera);
    var effectCopy = new THREE.ShaderPass(THREE.CopyShader);
    effectCopy.renderToScreen = true;
    composer.addPass(sunRenderModel);
    composer.addPass(effectBloom);
    composer.addPass(effectCopy);
person Saeid Nourian    schedule 25.04.2017