Pixi.js: рдПрдХ Pixi.js рдХреИрдирд╡рд╛рд╕ рдФрд░ рдПрдХ рддреАрди.js рдХреИрдирд╡рд╛рд╕ рдХрд╛ рдореЗрд▓

рдХреЛ рдирд┐рд░реНрдорд┐рдд 21 рдЬрдире░ 2015  ┬╖  12рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: pixijs/pixi.js

рд╣рд╛рдп рджреЛрд╕реНрддреЛрдВ !

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ Pixi.js рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдпрд╣ рдПрдХ рдорд╣рд╛рди рдЙрдкрдХрд░рдг рд╣реИ, рдЖрдИ рд▓рд╡ рдЗрдЯ! 2D рджреБрдирд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рддреАрди.js рдХрд╛ рд╕рд╣реА рдХрд╛рдЙрдВрдЯрд░ рднрд╛рдЧред

рдореИрдВ рдПрдХ рдРрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдБ рдЬрд╣рд╛рдБ рдореИрдВ рдпрд╣ рд╡рд┐рдиреНрдпрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдБ:

  • Pixi.js рдХреЗ рд╕рд╛рде рдкреВрд░реНрдг WebGL рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдПрдХ 2D UI
  • рдпрд╣ 2D UI рдереНрд░реА.рдЬреЗрдПрд╕ рдореЗрдВ рд▓рд┐рдЦреА рдЧрдИ 3D рджреБрдирд┐рдпрд╛ рдХреЗ рдореВрд▓ рдореЗрдВ рд╣реЛрдЧрд╛
  • рдпрд╣ 3 рдбреА рджреБрдирд┐рдпрд╛ рддрдм рддреАрди.js рдореЗрдВ рд╡реАрдЖрд░ рд╕реНрдЯреАрд░рд┐рдпреЛрд╕реНрдХреЛрдкрд┐рдХ рдХреИрдорд░рд╛ рдХреЗ рд╕рд╛рде рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛

рдЖрдк рдереНрд░реА.рдЬреЗрдПрд╕ рдХреИрдирд╡рд╕ рдХреЗ рдЕрдВрджрд░ рдкрд┐рдХреНрд╕реА.рдЬреЗрдПрд╕ рдХреИрдирд╡рд╕ рдХреЛ рдХреИрд╕реЗ рдПрдирдХреИрдкреНрд╕реБрд▓реЗрдЯ рдХрд░реЗрдВрдЧреЗ?

рдЖрдкрдХреЗ рд╕рдордп рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж !

рдЪрд┐рдпрд░реНрд╕

рдЗрдореИрдиреБрдПрд▓

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореИрдВ рдкреЛрд╕реНрдЯ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ ai рдиреЗ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рдореИрдВ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХреЛ рд╕рд┐рд░реНрдл рдЙрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкреЛрд╕реНрдЯ рдХрд░рддрд╛ рд╣реВрдВ рдЬрдм рдХреЛрдИ рдЙрд╕реА рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдЯрдХрд░рд╛рддрд╛ рд╣реИ рдФрд░ рдЙрд╕реЗ рдЫреВрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

<body>
    <script src="js/pixi.js"></script>
    <script src="js/three.min.js"></script>
    <script>
        width = window.innerWidth;
        height = window.innerHeight;

        //-------------------------------------------------------------------------------------
        // 3D Scene canvas
        //-------------------------------------------------------------------------------------
        var scene_3D = new THREE.Scene();
        scene_3D.fog = new THREE.Fog( "#a1a1a1", 2000, 4000 );

        var camera = new THREE.PerspectiveCamera( 75, width / height, 1, 10000 );
        camera.position.set( 0, 0, 700);
        camera.updateProjectionMatrix();

        var canvas_3D = new THREE.WebGLRenderer( { antialias: true } );
        canvas_3D.setSize( width, height );
        canvas_3D.setClearColor( scene_3D.fog.color, 1 );
        document.body.appendChild( canvas_3D.domElement );

        var geometry = new THREE.BoxGeometry( 500, 500, 500 );
        var material = new THREE.MeshNormalMaterial();
        var cube = new THREE.Mesh( geometry, material );
        cube.position.z = -500;
        cube.rotation.z = -45;
        scene_3D.add( cube );

        //-------------------------------------------------------------------------------------
        // 2D UI canvas
        //-------------------------------------------------------------------------------------
        var scene_UI = new PIXI.Stage( 0x66FF99 );

        var canvas_UI = PIXI.autoDetectRenderer(width, height, {transparent:true});
        canvas_UI.view.style.position = "absolute";
        canvas_UI.view.style.top = "0px";
        canvas_UI.view.style.left = "0px";

        var graphics = new PIXI.Graphics();
        graphics.beginFill( 0xe60630 );
        graphics.moveTo( width/2-200, height/2+100 );
        graphics.lineTo( width/2-200, height/2-100 );
        graphics.lineTo( width/2+200, height/2-100 );
        graphics.lineTo( width/2+200, height/2+100 );
        graphics.endFill();

        scene_UI.addChild( graphics );

        //-------------------------------------------------------------------------------------
        // Map 2D UI canvas on 3D Plane
        //-------------------------------------------------------------------------------------
        var texture_UI = new THREE.Texture( canvas_UI.view );
        texture_UI.needsUpdate = true;

        var material_UI = new THREE.MeshBasicMaterial( {map: texture_UI, side:THREE.DoubleSide } );
        material_UI.transparent = true;

        var mesh_UI = new THREE.Mesh( new THREE.PlaneGeometry(width, height), material_UI );
        mesh_UI.position.set(0,0,0);
        scene_3D.add( mesh_UI );

        //-------------------------------------------------------------------------------------
        // Render Animation
        //-------------------------------------------------------------------------------------
        function animate() {
            requestAnimationFrame( animate );
            canvas_UI.render( scene_UI );

            cube.rotation.y += 0.01;
            canvas_3D.render( scene_3D, camera );
        }
        animate();
    </script>
</body>

рд╕рднреА 12 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдпрджрд┐ рддреАрди .js рдПрдХ рдмрдирд╛рд╡рдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдХреИрдирд╡рд╛рд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдкрд┐рдХреНрд╕реА рдХреЛ рдПрдХ рдСрдлрд╕реНрдХреНрд░реАрди рдХреИрдирд╡рд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреЗ рддреАрди.рдЬреЗ рдХреЗ рджреГрд╢реНрдп рдореЗрдВ рдмрдирд╛рд╡рдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рдЯреАрдХ! рдареАрдХ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ!

рдмреБрдз рдкрд░, 21 рдЬрдирд╡рд░реА 2015 рдХреЛ рд╢рд╛рдо 4:45 рдмрдЬреЗ, рдЪрд╛рдб рдПрдВрдЧрд▓рд░ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

рдпрджрд┐ рддреАрди.js рдмрдирд╛рд╡рдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдХреИрдирд╡рд╛рд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдкрд┐рдХреНрд╕реА рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдПрдХ рдСрдлрд╕реНрдХреНрд░реАрди рдХреИрдирд╡рд╛рд╕ рдФрд░ рдЕрдкрдиреЗ рддреАрди рд╕реАрди рдХреЗ рджреГрд╢реНрдп рдореЗрдВ рдмрдирд╛рд╡рдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/GoodBoyDigital/pixi.js/issues/1366#issuecomment -70872648
ред

рдореИрдЯ рдЧреНрд░реЛрд╡реНрд╕

_ рддрдХрдиреАрдХреА рднрд╛рдЧреАрджрд╛рд░_

рдЯреЗрд▓реАрдлреЛрди: 07708 114496 :: www.goodboydigital.com
рдлрд░реНрд╕реНрдЯ рдлреНрд▓реЛрд░, рдпреВрдирд┐рдЯ 9B, рдХреНрд╡реАрдВрд╕ рдпрд╛рд░реНрдб, рд╡реНрд╣рд╛рдЗрдЯ рдкреЛрд╕реНрдЯ рд▓реЗрди, рд▓рдВрджрди, E9 5EN
рдЧреБрдбрдмрд╛рдп ┬йред рд╕рд░реНрд╡рд╛рдзрд┐рдХрд╛рд░ рд╕реБрд░рдХреНрд╖рд┐рддред

рд╡рд╛рд╣ ... рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж рджреЛрд╕реНрддреЛрдВ! :)

рдЗрд╕реЗ рд╣реА рдореИрдВ рдлрд╛рд╕реНрдЯ рдлреАрдбрдмреИрдХ рдХрд╣рддрд╛ рд╣реВрдВ!

рдореИрдВ рд╕рд┐рд░реНрдл рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВред

рдореБрдЭреЗ 2D UI рдкреИрдирд▓ (Pixi.js) рдЦреАрдВрдЪрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдХрд┐ Top of a 3D World (Three.js) рдкрд░ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рдПрдЧреАред
рд▓реЗрдХрд┐рди рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЙрди 2D UI рдкреИрдирд▓ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЧреБрдг рд╣реИрдВред

  • 0-100% рд╕реЗ рдЕрдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдХрд╛рд░рдХ рдХреЗ рд╕рд╛рде рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛
  • рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ 3 рдбреА рджреБрдирд┐рдпрд╛ рдХрд╛ рдзреБрдВрдзрд▓рд╛ рдкреНрд░рднрд╛рд╡

рдЕрдЧрд░ рдореИрдВ рдЕрдкрдиреЗ рдХреИрдирд╡рд╛рд╕ рдХреЛ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреА рддрд░рдХреАрдмреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕реЗ рдПрдХ рдмрдирд╛рд╡рдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реВрдВред рдореБрдЭреЗ рдбрд░ рд╣реИ рдХрд┐ рдкреГрд╖реНрдарднреВрдорд┐ рдХрд╛ рдзреБрдВрдзрд▓рд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛?

рдореИрдВрдиреЗ рдЗрд╕реЗ рджрд░реНрд╢рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪрд┐рддреНрд░ рд╕рдВрд▓рдЧреНрди рдХрд┐рдпрд╛ рд╣реИред
transparency

рдереНрд░реА.рдЬреЗрдПрд╕ рдХреА рддрд░рдл рдзрдмреНрдмрд╛ рд╣реИ? рдмрд╕ рдкрд┐рдХреНрд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкрд╛рд░рджрд░реНрд╢реА рдмрдирд╛рдПрдВ рдФрд░ рдлрд┐рд░ рдЕрдкрдиреЗ 3 рдбреА рд╕реАрди рдореЗрдВ рдмрдирд╛рд╡рдЯ рдХреЛ рдмреНрд▓реЗрдВрдб рдХрд░реЗрдВред

рдЖрдкрдХреА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рдзрдиреНрдпрд╡рд╛рдж ! рдЕрдм рдЬрдм рдЖрдкрдиреЗ рдпрд╣ рдХрд╣рд╛ рд╣реИ ... рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рдмрд╕реЗ рддрд╛рд░реНрдХрд┐рдХ рдорд╛рд░реНрдЧ рд╣реИ! :)

рдЪрд┐рдпрд░реНрд╕

рдЗ

рдореИрдВ рдкреЛрд╕реНрдЯ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ ai рдиреЗ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рдореИрдВ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХреЛ рд╕рд┐рд░реНрдл рдЙрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкреЛрд╕реНрдЯ рдХрд░рддрд╛ рд╣реВрдВ рдЬрдм рдХреЛрдИ рдЙрд╕реА рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдЯрдХрд░рд╛рддрд╛ рд╣реИ рдФрд░ рдЙрд╕реЗ рдЫреВрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

<body>
    <script src="js/pixi.js"></script>
    <script src="js/three.min.js"></script>
    <script>
        width = window.innerWidth;
        height = window.innerHeight;

        //-------------------------------------------------------------------------------------
        // 3D Scene canvas
        //-------------------------------------------------------------------------------------
        var scene_3D = new THREE.Scene();
        scene_3D.fog = new THREE.Fog( "#a1a1a1", 2000, 4000 );

        var camera = new THREE.PerspectiveCamera( 75, width / height, 1, 10000 );
        camera.position.set( 0, 0, 700);
        camera.updateProjectionMatrix();

        var canvas_3D = new THREE.WebGLRenderer( { antialias: true } );
        canvas_3D.setSize( width, height );
        canvas_3D.setClearColor( scene_3D.fog.color, 1 );
        document.body.appendChild( canvas_3D.domElement );

        var geometry = new THREE.BoxGeometry( 500, 500, 500 );
        var material = new THREE.MeshNormalMaterial();
        var cube = new THREE.Mesh( geometry, material );
        cube.position.z = -500;
        cube.rotation.z = -45;
        scene_3D.add( cube );

        //-------------------------------------------------------------------------------------
        // 2D UI canvas
        //-------------------------------------------------------------------------------------
        var scene_UI = new PIXI.Stage( 0x66FF99 );

        var canvas_UI = PIXI.autoDetectRenderer(width, height, {transparent:true});
        canvas_UI.view.style.position = "absolute";
        canvas_UI.view.style.top = "0px";
        canvas_UI.view.style.left = "0px";

        var graphics = new PIXI.Graphics();
        graphics.beginFill( 0xe60630 );
        graphics.moveTo( width/2-200, height/2+100 );
        graphics.lineTo( width/2-200, height/2-100 );
        graphics.lineTo( width/2+200, height/2-100 );
        graphics.lineTo( width/2+200, height/2+100 );
        graphics.endFill();

        scene_UI.addChild( graphics );

        //-------------------------------------------------------------------------------------
        // Map 2D UI canvas on 3D Plane
        //-------------------------------------------------------------------------------------
        var texture_UI = new THREE.Texture( canvas_UI.view );
        texture_UI.needsUpdate = true;

        var material_UI = new THREE.MeshBasicMaterial( {map: texture_UI, side:THREE.DoubleSide } );
        material_UI.transparent = true;

        var mesh_UI = new THREE.Mesh( new THREE.PlaneGeometry(width, height), material_UI );
        mesh_UI.position.set(0,0,0);
        scene_3D.add( mesh_UI );

        //-------------------------------------------------------------------------------------
        // Render Animation
        //-------------------------------------------------------------------------------------
        function animate() {
            requestAnimationFrame( animate );
            canvas_UI.render( scene_UI );

            cube.rotation.y += 0.01;
            canvas_3D.render( scene_3D, camera );
        }
        animate();
    </script>
</body>

рд╣рдо рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдРрд╕рд╛ рдХреБрдЫ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рдереЛрдбрд╝рд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рджреЛрдиреЛрдВ рдЗрдВрдЬрди (рдкрд┐рдХреНрд╕реА рдФрд░ рдереНрд░реАрдЬреЗрдПрд╕) рдирд┐рд░рд░реНрдердХ рдХреЙрд▓ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреАрдПрд▓ рд░рд╛рдЬреНрдп рдХрд╛ рдЯреНрд░реИрдХ рд░рдЦрддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╡реЗ рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рдЦреЗрд▓рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рд░реЗрдВрдбрд░рд░реНрд╕ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЙрдирдХреЗ рдЭрдВрдбреЗ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдереНрд░реА рдЬреЗрдПрд╕ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдЖрдк renderer.resetGLState() рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

PIXI рдореЗрдВ, рдпрд╣ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬреЗрдВ WebGLRenderer рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛрдВрдЧреАред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдЗрдирдХреА рдЬрд░реВрд░рдд рд╣реЛрддреА рд╣реИ

    gl.disable(gl.DEPTH_TEST)
    gl.enable(gl.BLEND)
    gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA)
    gl.disable(gl.STENCIL_TEST)
    gl.disable(gl.CULL_FACE)

    gl.frontFace( gl.CCW )    
    gl.cullFace( gl.FRONT )
    gl.colorMask(true, true, true, true)
    gl.activeTexture(gl.TEXTURE0)

    var shaderManager = session.shaderManager

    shaderManager._currentId = undefined
    for (var i=0; i<shaderManager.attribState.length; i++)
        shaderManager.attribState[i] = false
    shaderManager.setShader(shaderManager.currentShader)

    var blend = session.blendModeManager.currentBlendMode
    if (blend in PIXI.blendModesWebGL) {
        session.blendModeManager.currentBlendMode = undefined
        session.blendModeManager.setBlendMode(blend)
    }

рдпрд╣ рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рдлреНрд░реЗрдо рдмрдлрд░ рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рдХреЗ рдмрд┐рдирд╛ 3 рдбреА рджреГрд╢реНрдп рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдпреВрдЖрдИ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдЕрдкрдиреЗ UI рдХреЗ рдиреАрдЪреЗ рдзреБрдВрдзрд▓рд╛ рд╣реЛ рдЬрд╛рдирд╛ рдХрд╛рдлреА рдЬрдЯрд┐рд▓ рд╣реИред рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:

  • рдПрдХ рдлреНрд░реЗрдо рдмрдлрд░ рдХреЗ рд▓рд┐рдП 3 рдбреА рджреГрд╢реНрдп рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛
  • рдХреИрдВрдЪреА рдкрд░реАрдХреНрд╖рдг рдХреЛ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ рдФрд░ рдорд▓реНрдЯреА рдкрд╛рд╕ рдмреНрд▓рд░ рд╢реЗрдбрд░ (рдкрд┐рдВрдЧ-рдкреЙрдиреНрдЧрд┐рдВрдЧ рдПрдлрдмреАрдУ рдЖрджрд┐) рдХреЗ рд╕рд╛рде рдмреНрд▓рд░ рдХреНрд╖реЗрддреНрд░ рдХреЛ рд░реЗрдВрдбрд░ рдХрд░реЗрдВред
  • рдлрд┐рд░ рд╢реАрд░реНрд╖ рдкрд░ 2D UI рдкреНрд░рджрд╛рди рдХрд░реЗрдВ

рдЗрд╕ рдмрд╣реБрдд рд╕рдЯреАрдХ рдФрд░ рдкреНрд░рд▓реЗрдЦрд┐рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореИрдЯ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! :)

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ WebGL рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдирдпрд╛ рд╣реВрдБ рдпрд╣ рдмреЗрд╣рдж рдорджрджрдЧрд╛рд░ рд╣реИред
рдореИрдВ рдкрд╣рд▓реЗ рдорд┐рдХреНрд╕ 2 рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдЭрд┐рдЭрдХ рд░рд╣рд╛ рдерд╛, рдЦрд╛рд╕рдХрд░ рдХрд┐ рдПрдХ рд╣реИрдХ рдХрд┐рдпрд╛ рд╣реБрдЖ рдереНрд░реАред рдЬреЗрдПрд╕ рдХреБрдЫ рдкрд┐рдХреНрд╕реА рдХреА рдЬрдЧрд╣ рд▓реЗ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдореБрдЭреЗ рдЪрд╛рд╣рд┐рдПред

рд▓реЗрдХрд┐рди рдЙрддреНрдХреГрд╖реНрдЯ рдЫреВрдЯ, 2 рдбреА рдкрд░ рджреЗрд╡ рдХрд╛ рдмрд╣реБрдд рдлреЛрдХрд╕ рдмрд┐рдВрджреБ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрдЭреЗ gl2d рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдкрд┐рдХреНрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╢реНрд╡рд╕реНрдд рдХрд┐рдпрд╛ред

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдорд┐рдХреНрд╕ рдЕрдкреНрд░реЛрдЪ рдХреЛ рднреА рдЪреБрдирд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реИ рдХрд┐ PixGL рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ WebGL рдХреЗ рд╕рд╛рде 2D рддрддреНрд╡реЛрдВ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╡рд┐рдХрд▓реНрдк рд╣реИред

рдЪрд┐рдпрд░реНрд╕

рдЗ

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдорд┐рдХреНрд╕ рдЕрдкреНрд░реЛрдЪ рдХреЛ рднреА рдЪреБрдирд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реИ рдХрд┐ PixGL рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ WebGL рдХреЗ рд╕рд╛рде 2D рддрддреНрд╡реЛрдВ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╡рд┐рдХрд▓реНрдк рд╣реИред

рд╢рд╛рдпрдж рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рджрд░реНрд╢рди рдореВрдЯ рд╣реИ (рдЖрдкрдХреЛ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ 3000 рдмрдЯрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреИрд╕реЗ рд╣реЛрддреА рд╣реИ?), рдФрд░ рдордЬрдмреВрдд рдЯреЗрдХреНрд╕реНрдЯ рд░реЗрдВрдбрд░рд┐рдВрдЧ, рдЯреЗрдХреНрд╕реНрдЯ рдЗрдирдкреБрдЯ рдФрд░ рд╕реНрдХреНрд░реЙрд▓ рдЗрд╡реЗрдВрдЯ рдЬреИрд╕реА рдЪреАрдЬреЗрдВ рд╡реЗрдмрдЬреАрдПрд▓ рдореЗрдВ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдЪреБрдиреМрддреАрдкреВрд░реНрдг рд╣реЛ рд╕рдХрддреА рд╣реИрдВред

рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рдорд╛рд░реНрдЧ UI рдХреЗ рд▓рд┐рдП DOM / CSS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ WebGL (рдпрд╛рдиреА рдХреБрдЫ рдкреНрд░рднрд╛рд╡реЛрдВ, рдЧрд╣рд░рд╛рдИ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдЖрджрд┐ рдХреЗ рд▓рд┐рдП) рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдкрд┐рдХреНрд╕реА рд╢рд╛рдпрдж 2D рдпреВрдЖрдИ рдХреЗ рд▓рд┐рдП рдереНрд░реАрдЬреЗрдПрд╕ рд╕реЗ рдЕрдзрд┐рдХ рдЖрд╕рд╛рди рд╣реЛрдЧреАред

рдпрд╣ рдЙрддреНрддрд░ рджреЗрдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ рдЗрд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рдЗрд╕ рдереНрд░реЗрдб рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдХреЛрдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реБрдИ рд╣реИред рдХреГрдкрдпрд╛ рд╕рдВрдмрдВрдзрд┐рдд рдмрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдЦреЛрд▓реЗрдВред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

YuryKuvetski picture YuryKuvetski  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

readygosports picture readygosports  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

samueller picture samueller  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

SebastienFPRousseau picture SebastienFPRousseau  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

gaccob picture gaccob  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ