Three.js: GLTF2Loader рдХреЛ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдКрдкрд░-рдиреАрдЪреЗ рд▓реЛрдб рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдХреЛ рдирд┐рд░реНрдорд┐рдд 11 рдЕрдЧре░ 2017  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: mrdoob/three.js

GLTF2Loader рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдкреИрдЯрд░реНрди рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

class GLTF2Parser {
  loadMeshes () {

    return this._withDependencies( [

      'materials',
      'accessors'

    ] ).then( ( dependencies ) => {

      _each( json.meshes, ( meshDef ) => {

        var geometry = /* ... */;
        var material = dependencies.materials[ meshDef.material ];
        var mesh = new THREE.Mesh( geometry, material );
        // ...
        return mesh;

      } );
      // ...
      return meshes;

    } );

  }

  // ...
}

рдирддреАрдЬрддрди, рд╕рднреА рдПрдХреНрд╕реЗрд╕рд░реНрд╕ (рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рд╕рднреА .bin рдмрдлрд░ рдлрд╛рдЗрд▓реЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВ) рдХреЛ рдХрд┐рд╕реА рднреА рдореЗрд╢ рдХреЗ рдирд┐рд░реНрдорд╛рдг рд╕реЗ рдкрд╣рд▓реЗ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИ, рдпрджрд┐ рд╕рднреА рдмрдлрд╝рд░реНрд╕ рдХреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

  • (рдбреНрд░рд╛рдлреНрдЯ) KHR_draco_mesh_compression рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдПрдХ рдбреНрд░реЗрдХреЛ .bin рдлрд╝рд╛рдЗрд▓, рдФрд░ рдПрдХ рдЕрд╕рдореНрдкреАрдбрд┐рдд .bin рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдбреНрд░реЗрдХреЛ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдЕрднреА рднреА рдЕрдбреЙрдкреНрдЯрд┐рдорд╛рдЗрдЬреНрдб рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рд╡рд╛рдкрд╕ рдЖ рд╕рдХреЗрдВред рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдХреЗрд╡рд▓ рдПрдХ рдмрдлрд░ рд▓реЛрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
  • (рдбреНрд░рд╛рдлреНрдЯ) MSFT_lod рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореЗрдВ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред
  • рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдорд╛рдиреНрдп рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ рдПрдХ рд╣реА рдЬрд╛рд▓ рдкрд░ рдореЗрдЯрд▓-рд░рдл рдФрд░ рд╕реНрдкреЗрдХ-рдЧреНрд▓реЙрд╕ рд╕рд╛рдордЧреНрд░реА рджреЛрдиреЛрдВ рдХреЛ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИред рд▓реЛрдбрд░ рдкреНрд░рджрд░реНрд╢рди рдФрд░ рдлреАрдЪрд░ рд╕рдорд░реНрдерди рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЪреБрди рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ ' рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдмрдирд╛рд╡рдЯ рдХрд╛ рдЕрдиреБрд░реЛрдз рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ред рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ GLTF2Loader рдХрд░реЗрдЧрд╛ред

рдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдКрдкрд░-рдиреАрдЪреЗ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП GLTF2Loader рдХрд╛ рдкреБрдирд░реНрдЧрдарди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рд┐рдВрдЯреИрдХреНрд╕ (рдЬрдм рддрдХ рдХрд┐ рдирдХрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреЗ рдореМрдЬреВрджрд╛ рдЙрджрд╛рд╣рд░рдг рди рд╣реЛрдВ) рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛:

class GLTF2Parser {
  loadMesh ( meshDef ) {

     return Promise.all( [

       this.loadGeometry( meshDef.primitives ),
       this.loadMaterial( meshDef.material )

     ] ).then( ( dependencies ) => {

       var [geometry, material] = dependencies;
       var mesh new THREE.Mesh( geometry, material );
       // ...
       return mesh;

     } );

  }

  // ...
}

^ рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдХреЗ рд▓рд┐рдП ES6 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕рдВрднрд╡рддрдГ рдЗрд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрджрд╛рд╣рд░рдгреЛрдВ/js рдореЗрдВ рдЪреЗрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдореИрдВ рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреА рдпрд╛рддреНрд░рд╛ рд╢реБрд░реВ рдХрд░реВрдВ, рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕ рдкрд░ рдХреЛрдИ рдордЬрдмреВрдд рдкреНрд░рд╛рдердорд┐рдХрддрд╛? рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдХрд┐ рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рд╡реГрджреНрдзрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

/рд╕реАрд╕реА @takahirox

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ gltf рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдмрдВрдзрдиреАрдп рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдиреЗрдЯ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдХреЛ рдЫреЛрдбрд╝рдирд╛ рдареАрдХ рд╣реИ

рддреЛ Promise s рдЕрдЪреНрдЫреЗ рд╣реИрдВред ES6... рд╕реБрд╡рд┐рдзрд╛ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдВрдЧрддрддрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред

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

рдореИрдВ рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред
рдЖрдИрдПрдордУ _withDependencies рдФрд░ _each рдХрд╛ рд╕рдВрдпреЛрдЬрди рдереЛрдбрд╝рд╛ рдЬрдЯрд┐рд▓ рд╣реИред

BTW, @mrdoob рдХреНрдпрд╛ рдЖрдк рд╣рдореЗрдВ Promise рдФрд░ ES6 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ gltf рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдмрдВрдзрдиреАрдп рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдиреЗрдЯ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдХреЛ рдЫреЛрдбрд╝рдирд╛ рдареАрдХ рд╣реИ

рддреЛ Promise s рдЕрдЪреНрдЫреЗ рд╣реИрдВред ES6... рд╕реБрд╡рд┐рдзрд╛ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдВрдЧрддрддрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред

рдзрдиреНрдпрд╡рд╛рдж @takahirox рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП!

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдмрдВрдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЗ рд╕рдЦреНрддреА рд╕реЗ рдКрдкрд░-рдиреАрдЪреЗ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ - рдХрдИ рджреГрд╢реНрдпреЛрдВ рд╡рд╛рд▓реЗ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХрд┐рд╕реА рджрд┐рди getMultiDependencies() рдорд╛рдзреНрдпрдо рд╕реЗ рдиреЛрдбреНрд╕ рдпрд╛ рдПрдХреНрд╕реЗрд╕рд░реНрд╕ рдХреЛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╕рднреА рдЙрджрд╛рд╣рд░рдг рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдЕрдм рддрдХ рджреЗрдЦрд╛ рд╣реИ, рд╡рд░реНрддрдорд╛рди рд╕рдВрд░рдЪрдирд╛ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рджрд┐рдЦрддреА рд╣реИред

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

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

jack-jun picture jack-jun  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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

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

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

jens-duttke picture jens-duttke  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ