Three.js: يجب أن يقوم GLTF2Loader بتحميل التبعيات من أعلى لأسفل.

تم إنشاؤها على ١١ أغسطس ٢٠١٧  ·  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 لأحد الأصول بتضمين ملف Draco .bin ، و .bin غير مضغوط ، بحيث لا يزال بإمكان العملاء الذين لا يدعمون Draco الرجوع إلى الإصدار غير الأمثل. في كلتا الحالتين ، نريد تحميل واحد فقط من المخازن المؤقتة.
  • ملحق 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.

قبل الشروع في رحلة إعادة الهيكلة ، هل هناك أي تفضيلات قوية حول كيفية عمل ذلك؟ آمل ، ولكن سأحتاج إلى التحقق ، أن هذا التغيير يمكن أن يحدث بشكل تدريجي.

/ cc تكاهيروكس

التعليق الأكثر فائدة

أعتقد أنه من الجيد التخلص من Internet Explorer من أجل الحصول على رمز يمكن التحكم فيه لتحميل gltf 👌

لذا فإن Promise s رائع. ES6 ... يعتمد على الميزة وتوافق المستعرض.

ال 3 كومينتر

أنا أتفق مع إعادة بناء ديون.
IMO مجموعة _withDependencies و _each معقدة بعض الشيء.

راجع للشغل ، mrdoob هل تسمح لنا باستخدام Promise و ES6؟

أعتقد أنه من الجيد التخلص من Internet Explorer من أجل الحصول على رمز يمكن التحكم فيه لتحميل gltf 👌

لذا فإن Promise s رائع. ES6 ... يعتمد على الميزة وتوافق المستعرض.

شكرا @ تكاهيروكس لإعادة بيع

أعتقد أنه يمكن إغلاق هذا. بعض الأجزاء ليست من أعلى إلى أسفل بشكل صارم - بالنسبة لنموذج ذي مشاهد متعددة ، قد نرغب يومًا ما في عدم استرداد عقد أو موصّلات عبر getMultiDependencies() . لكن بالنسبة لجميع النماذج النموذجية التي رأيتها حتى الآن ، فإن الهيكل الحالي يبدو أفضل بكثير.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

Horray picture Horray  ·  3تعليقات

makc picture makc  ·  3تعليقات

clawconduce picture clawconduce  ·  3تعليقات

donmccurdy picture donmccurdy  ·  3تعليقات

akshaysrin picture akshaysrin  ·  3تعليقات