Di sini , di kelas InterleavedBuffer, disarankan untuk memiliki nilai default 0 untuk langkah. Jika pengguna lupa menentukan langkahnya, this.stride
akan memiliki nilai undefined
, ini akan mengalir ke var stride = data.stride;
, dan selanjutnya ke _gl.vertexAttribPointer
menyebabkan perilaku webgl yang tidak terdefinisi.
Menetapkan nilai default untuk argumen berarti boleh saja tidak menentukan nilai sama sekali. Namun, dalam hal ini, nilai harus ditetapkan.
Juga, jika nol adalah default, baris berikutnya dapat dibagi dengan nol.
three.js umumnya tidak memeriksa nilai parameter.
Sayangnya, tidak ada cara untuk memaksa pengguna menyetel nilai itu, tidak seperti C++, nilai itu akan dideteksi selama waktu kompilasi. Jika harus disetel, mengapa tidak membuat kesalahan jika tidak disetel alih-alih melewati secara diam-diam dan mengembalikan perilaku grafik yang aneh? Sebagai pengguna baru three.js, saya membuang banyak waktu untuk mencari tahu masalahnya, dan saya cukup yakin saya tidak akan menjadi satu-satunya orang yang akan jatuh ke dalam perangkap ini.
Tidak ada cara untuk mencegah pengguna menetapkan 0 ke stride
, yang akan menyebabkan masalah bagi-dengan-nol @WestLangley baru saja disebutkan.
Dokumen API di sini gagal memberikan deskripsi yang jelas tentang arti stride
. Berdasarkan pengalaman saya dengan OpenGL/WebGL API, stride
di sini adalah jumlah elemen primitif, float atau int, untuk atribut vertex. Jadi count
tampaknya menjadi jumlah simpul yang atributnya didefinisikan dalam argumen pertama array
.
Dan, koreksi saya jika saya salah, this.count
tidak menemukan penggunaan apa pun di seluruh WebGLRender , sedangkan stride
telah digunakan dalam panggilan GL kritis _gl.vertexAttribPointer
. Ini juga menjelaskan mengapa setelah menetapkan stride
0, yang tidak sepenuhnya benar dan this.count
sekarang Infinity
, itu membuat rendering saya kembali normal, karena tidak pernah digunakan apa pun dimana dalam kerangka
Jadi, saya akan menyarankan menyiapkan penjaga aman untuk memeriksa nilai stride
dan meminta pengguna jika undefined
atau 0
.
Ya, ini adalah JavaScript, dan kami telah melakukan diskusi ini sebelumnya .
Di sisi lain, jika Anda merasa dokumentasinya tidak memadai atau tidak benar, ini adalah saat yang tepat untuk membantu kami memperbaikinya. :)
Dalam kode yang Anda referensikan, count
adalah jumlah simpul. Properti mungkin, atau mungkin tidak, digunakan oleh penyaji, tetapi itu adalah properti yang tersedia untuk lapisan aplikasi jika diperlukan.
Komentar yang paling membantu
Menetapkan nilai default untuk argumen berarti boleh saja tidak menentukan nilai sama sekali. Namun, dalam hal ini, nilai harus ditetapkan.
Juga, jika nol adalah default, baris berikutnya dapat dibagi dengan nol.
three.js umumnya tidak memeriksa nilai parameter.