Three.js: kehilangan nilai default langkah untuk kelas InterleavedBuffer

Dibuat pada 28 Mei 2017  ·  3Komentar  ·  Sumber: mrdoob/three.js

Deskripsi masalah

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.

Versi Three.js
  • [X] Dev
  • [x] r85
  • [ ] ...
Peramban
  • [x] Semuanya
  • [ ] Chrome
  • [ ] Firefox
  • [ ] Internet Explorer
OS
  • [x] Semuanya
  • [ ] Jendela
  • [ ] macOS
  • [ ] Linux
  • [ ] Android
  • [ ] iOS

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.

Semua 3 komentar

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.

  1. 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.

  2. Tidak ada cara untuk mencegah pengguna menetapkan 0 ke stride , yang akan menyebabkan masalah bagi-dengan-nol @WestLangley baru saja disebutkan.

  3. 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 .

  4. 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.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat