Three.js: القيمة الافتراضية المفقودة للخطوة لفئة InterleavedBuffer

تم إنشاؤها على ٢٨ مايو ٢٠١٧  ·  3تعليقات  ·  مصدر: mrdoob/three.js

وصف المشكلة

هنا في فئة InterleavedBuffer ، يُقترح أن يكون لديك القيمة الافتراضية 0 للخطوة. إذا نسي المستخدم تحديد الخطوة ، فستكون قيمة $ # this.stride undefined ، وسيتدرج هذا إلى var stride = data.stride; ، ثم إلى _gl.vertexAttribPointer مما يتسبب في سلوك webgl غير محدد.

إصدار Three.js
  • [X] ديف
  • [x] r85
  • [] ...
المستعرض
  • [x] كل منهم
  • [ ] كروم
  • [ ] ثعلب النار
  • [ ] متصفح الانترنت
نظام التشغيل
  • [x] كل منهم
  • [ ] شبابيك
  • [] macOS
  • [] لينكس
  • [ ] ذكري المظهر
  • [] iOS

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

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

أيضًا ، إذا كان الصفر هو القيمة الافتراضية ، يمكن أن يقسم السطر التالي على صفر.

لا تتحقق three.js عمومًا من قيم المعلمات.

ال 3 كومينتر

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

أيضًا ، إذا كان الصفر هو القيمة الافتراضية ، يمكن أن يقسم السطر التالي على صفر.

لا تتحقق three.js عمومًا من قيم المعلمات.

  1. لسوء الحظ ، لا توجد طريقة لإجبار المستخدم على تعيين هذه القيمة ، على عكس C ++ ، سيتم اكتشافها أثناء وقت الترجمة. إذا كان لا بد من ضبطه ، فلماذا لا تلقي خطأ في حالة عدم ضبطه بدلاً من المرور بصمت وإرجاع سلوك رسومات غريب؟ باعتباري مستخدمًا جديدًا لـ three.js ، فقد ضيعت الكثير من الوقت في اكتشاف المشكلة ، وأنا متأكد تمامًا من أنني لن أكون الشخص الوحيد الذي سيقع في هذا المأزق.

  2. لا توجد طريقة لمنع المستخدم من تخصيص 0 إلى stride ، الأمر الذي قد يتسبب في مشكلة القسمة على الصفر التي ذكرها WestLangley للتو.

  3. فشل مستند API هنا في إعطاء وصف واضح لما يعنيه stride . بناءً على تجربتي مع OpenGL / WebGL API ، فإن stride هنا هو عدد العناصر الأولية ، عائم أو int ، لسمة قمة الرأس. لذا يبدو أن count هو عدد الرؤوس التي تم تعريف سماتها في الوسيطة الأولى array .

  4. وصححني إذا كنت مخطئًا ، فإن this.count لا يجد أي استخدام خلال WebGLRender بالكامل ، بينما تم استخدام stride في استدعاء GL الحرج _gl.vertexAttribPointer . وهذا يفسر أيضًا لماذا بعد تعيين stride 0 ، وهذا ليس صحيحًا تمامًا و this.count أصبح الآن Infinity ، يجعل العرض الخاص بي يعود إلى الوضع الطبيعي ، لأنه لم يتم استخدامه مطلقًا. أين في الإطار.

لذلك ، أقترح إعداد حارس آمن للتحقق من قيمة stride وحث المستخدم في حالة undefined أو 0 .

نعم ، هذا هو JavaScript ، وقد أجرينا هذه المناقشات من قبل .

من ناحية أخرى ، إذا شعرت أن الوثائق غير كافية أو غير صحيحة ، فسيكون هذا وقتًا رائعًا لمساعدتنا في تحسينها. :)

في الكود الذي أشرت إليه ، count هو عدد الرؤوس. قد يتم استخدام الخاصية ، أو لا ، بواسطة العارض ، ولكنها خاصية متاحة لطبقة التطبيق إذا لزم الأمر.

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