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
рдмрдлрд░ рдлрд╛рдЗрд▓реЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВ) рдХреЛ рдХрд┐рд╕реА рднреА рдореЗрд╢ рдХреЗ рдирд┐рд░реНрдорд╛рдг рд╕реЗ рдкрд╣рд▓реЗ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИ, рдпрджрд┐ рд╕рднреА рдмрдлрд╝рд░реНрд╕ рдХреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
.bin
рдлрд╝рд╛рдЗрд▓, рдФрд░ рдПрдХ рдЕрд╕рдореНрдкреАрдбрд┐рдд .bin
рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдбреНрд░реЗрдХреЛ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдЕрднреА рднреА рдЕрдбреЙрдкреНрдЯрд┐рдорд╛рдЗрдЬреНрдб рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рд╡рд╛рдкрд╕ рдЖ рд╕рдХреЗрдВред рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдХреЗрд╡рд▓ рдПрдХ рдмрдлрд░ рд▓реЛрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВредрдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдКрдкрд░-рдиреАрдЪреЗ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 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
рдореИрдВ рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред
рдЖрдИрдПрдордУ _withDependencies
рдФрд░ _each
рдХрд╛ рд╕рдВрдпреЛрдЬрди рдереЛрдбрд╝рд╛ рдЬрдЯрд┐рд▓ рд╣реИред
BTW, @mrdoob рдХреНрдпрд╛ рдЖрдк рд╣рдореЗрдВ Promise
рдФрд░ ES6 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ?
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ gltf рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдмрдВрдзрдиреАрдп рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдиреЗрдЯ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдХреЛ рдЫреЛрдбрд╝рдирд╛ рдареАрдХ рд╣реИ
рддреЛ Promise
s рдЕрдЪреНрдЫреЗ рд╣реИрдВред ES6... рд╕реБрд╡рд┐рдзрд╛ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдВрдЧрддрддрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред
рдзрдиреНрдпрд╡рд╛рдж @takahirox рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП!
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдмрдВрдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЗ рд╕рдЦреНрддреА рд╕реЗ рдКрдкрд░-рдиреАрдЪреЗ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ - рдХрдИ рджреГрд╢реНрдпреЛрдВ рд╡рд╛рд▓реЗ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХрд┐рд╕реА рджрд┐рди getMultiDependencies()
рдорд╛рдзреНрдпрдо рд╕реЗ рдиреЛрдбреНрд╕ рдпрд╛ рдПрдХреНрд╕реЗрд╕рд░реНрд╕ рдХреЛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╕рднреА рдЙрджрд╛рд╣рд░рдг рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдЕрдм рддрдХ рджреЗрдЦрд╛ рд╣реИ, рд╡рд░реНрддрдорд╛рди рд╕рдВрд░рдЪрдирд╛ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рджрд┐рдЦрддреА рд╣реИред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ gltf рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдмрдВрдзрдиреАрдп рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдиреЗрдЯ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдХреЛ рдЫреЛрдбрд╝рдирд╛ рдареАрдХ рд╣реИ
рддреЛ
Promise
s рдЕрдЪреНрдЫреЗ рд╣реИрдВред ES6... рд╕реБрд╡рд┐рдзрд╛ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдВрдЧрддрддрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред