ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • vue3, three.js example
    공부하기/vue.js 2021. 4. 25. 15:58

    getBackgound.js

     

    import * as THREE from 'three'

    import EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js';

    import ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js';

    import TexturePass } from 'three/examples/jsm/postprocessing/TexturePass.js';

    import ClearPass } from 'three/examples/jsm/postprocessing/ClearPass.js';

    import MaskPassClearMaskPass } from 'three/examples/jsm/postprocessing/MaskPass.js';

    import CopyShader } from 'three/examples/jsm/shaders/CopyShader.js';

     

    const getBackground = ( stopAnimation= true=> {

        let cameracomposerrenderer;

        let torus1torus2;

        let animateIdrendererDom

     

        function init() {

            camera = new THREE.PerspectiveCamera50window.innerWidth / window.innerHeight11000 );

            camera.position.z = 10;

     

            const scene1 = new THREE.Scene();

            const scene2 = new THREE.Scene();

     

            torus1 = new THREE.Meshnew THREE.TorusGeometrywindow.innerWidth/window.innerHeight11632 ) );

            scene1.addtorus1 );

     

            torus2 = new THREE.Meshnew THREE.TorusGeometry(  (window.innerWidth/window.innerHeight)+1.511632 ) );

            scene2.addtorus2 );

     

            renderer = new THREE.WebGLRenderer();

            renderer.setClearColor0xe0e0e0 );

            renderer.setPixelRatiowindow.devicePixelRatio );

            renderer.setSizewindow.innerWidthwindow.innerHeight );

            renderer.autoClear = false;

            

            rendererDom= document.body.appendChildrenderer.domElement );

            

     

            const clearPass = new ClearPass();

     

            const clearMaskPass = new ClearMaskPass();

     

            const maskPass1 = new MaskPassscene1camera );

            const maskPass2 = new MaskPassscene2camera );

     

            const cartoonImage = require('YOUR_PATH');

            const texture1 = new THREE.TextureLoader().load( cartoonImage );

            texture1.minFilter = THREE.LinearFilter;

            const officeImage = require('YOUR_PATH');

            const texture2 = new THREE.TextureLoader().load( officeImage );

     

            const texturePass1 = new TexturePasstexture1 );

            const texturePass2 = new TexturePasstexture2 );

     

            const outputPass = new ShaderPassCopyShader );

     

            const parameters = {

                minFilter: THREE.LinearFilter,

                magFilter: THREE.LinearFilter,

                format: THREE.RGBFormat,

                stencilBuffertrue

            };

     

            const renderTarget = new THREE.WebGLRenderTargetwindow.innerWidthwindow.innerHeightparameters );

     

            composer = new EffectComposerrendererrenderTarget );

            composer.addPassclearPass );

            composer.addPassmaskPass1 );

            composer.addPasstexturePass1 );

            composer.addPassclearMaskPass );

            composer.addPassmaskPass2 );

            composer.addPass( texturePass2 );

            composer.addPassclearMaskPass );

            composer.addPassoutputPass );

     

            window.addEventListener'resize'onWindowResize );

            

        }

     

        function onWindowResize() {

     

            const width = window.innerWidth;

            const height = window.innerHeight;

     

            camera.aspect = width / height;

            camera.updateProjectionMatrix();

     

            renderer.setSize( width, height );

            composer.setSize( width, height );

     

        }

     

        function animate() {

            animateId= requestAnimationFrameanimate );

     

            const time = performance.now() * 0.001 + 6000;

     

            torus1.position.x = Math.costime / 1.5 ) * 2;

            torus1.position.y = Math.sintime ) ;

            torus1.rotation.x = Math.costime / 1.5 ) * 2;

            torus1.rotation.y = Math.sintime ) * 3;

     

            torus2.position.x = Math.costime / 1.5 ) * 6;

            torus2.position.y = Math.sintime / 3 );

            torus2.rotation.x = time;

            torus2.rotation.y = time / 2;

     

            renderer.clear();

            composer.rendertime );

     

        }

        init();

        animate();

        return { animateIdrendererDom };

    }

     

    export default getBackground;

     

    App.vue

    ~~~

    ~~~

    ~~~

    import getBackgound from 'YOUR_PATH/getBackgound'

     

    setup() {

            const { animateId, rendererDom } = getBackgound();

            onBeforeUnmount(()=> {

                // cancelAnimationFrame( animateId ) //애니메이션 제거

                // document.body.removeChild(rendererDom) //돔에서 제거

            })

        },

    ~~~

    ~~~

    ~~~

     

    result

     

    '공부하기 > vue.js' 카테고리의 다른 글

    vue3, git actions, cypress 배포 테스트  (0) 2021.04.22
    vue3 github actions github pages 배포  (0) 2021.04.18
    vue 3 & github pages 배포  (0) 2021.04.17
Designed by Tistory.