هنا في فئة InterleavedBuffer ، يُقترح أن يكون لديك القيمة الافتراضية 0 للخطوة. إذا نسي المستخدم تحديد الخطوة ، فستكون قيمة $ # this.stride
undefined
، وسيتدرج هذا إلى var stride = data.stride;
، ثم إلى _gl.vertexAttribPointer
مما يتسبب في سلوك webgl غير محدد.
تعيين قيمة افتراضية لوسيطة يعني أنه لا بأس من عدم تحديد قيمة على الإطلاق. ومع ذلك ، في هذه الحالة ، يجب تعيين قيمة.
أيضًا ، إذا كان الصفر هو القيمة الافتراضية ، يمكن أن يقسم السطر التالي على صفر.
لا تتحقق three.js عمومًا من قيم المعلمات.
لسوء الحظ ، لا توجد طريقة لإجبار المستخدم على تعيين هذه القيمة ، على عكس C ++ ، سيتم اكتشافها أثناء وقت الترجمة. إذا كان لا بد من ضبطه ، فلماذا لا تلقي خطأ في حالة عدم ضبطه بدلاً من المرور بصمت وإرجاع سلوك رسومات غريب؟ باعتباري مستخدمًا جديدًا لـ three.js ، فقد ضيعت الكثير من الوقت في اكتشاف المشكلة ، وأنا متأكد تمامًا من أنني لن أكون الشخص الوحيد الذي سيقع في هذا المأزق.
لا توجد طريقة لمنع المستخدم من تخصيص 0 إلى stride
، الأمر الذي قد يتسبب في مشكلة القسمة على الصفر التي ذكرها WestLangley للتو.
فشل مستند API هنا في إعطاء وصف واضح لما يعنيه stride
. بناءً على تجربتي مع OpenGL / WebGL API ، فإن stride
هنا هو عدد العناصر الأولية ، عائم أو int ، لسمة قمة الرأس. لذا يبدو أن count
هو عدد الرؤوس التي تم تعريف سماتها في الوسيطة الأولى array
.
وصححني إذا كنت مخطئًا ، فإن this.count
لا يجد أي استخدام خلال WebGLRender بالكامل ، بينما تم استخدام stride
في استدعاء GL الحرج _gl.vertexAttribPointer
. وهذا يفسر أيضًا لماذا بعد تعيين stride
0 ، وهذا ليس صحيحًا تمامًا و this.count
أصبح الآن Infinity
، يجعل العرض الخاص بي يعود إلى الوضع الطبيعي ، لأنه لم يتم استخدامه مطلقًا. أين في الإطار.
لذلك ، أقترح إعداد حارس آمن للتحقق من قيمة stride
وحث المستخدم في حالة undefined
أو 0
.
نعم ، هذا هو JavaScript ، وقد أجرينا هذه المناقشات من قبل .
من ناحية أخرى ، إذا شعرت أن الوثائق غير كافية أو غير صحيحة ، فسيكون هذا وقتًا رائعًا لمساعدتنا في تحسينها. :)
في الكود الذي أشرت إليه ، count
هو عدد الرؤوس. قد يتم استخدام الخاصية ، أو لا ، بواسطة العارض ، ولكنها خاصية متاحة لطبقة التطبيق إذا لزم الأمر.
التعليق الأكثر فائدة
تعيين قيمة افتراضية لوسيطة يعني أنه لا بأس من عدم تحديد قيمة على الإطلاق. ومع ذلك ، في هذه الحالة ، يجب تعيين قيمة.
أيضًا ، إذا كان الصفر هو القيمة الافتراضية ، يمكن أن يقسم السطر التالي على صفر.
لا تتحقق three.js عمومًا من قيم المعلمات.