Three.js: valeur par défaut manquante de stride pour la classe InterleavedBuffer

Créé le 28 mai 2017  ·  3Commentaires  ·  Source: mrdoob/three.js

description du problème

Ici , dans la classe InterleavedBuffer, il est suggéré d'avoir la valeur par défaut 0 pour stride. Si l'utilisateur oublie de spécifier la foulée, this.stride aurait la valeur undefined , cela se répercuterait sur var stride = data.stride; , puis sur _gl.vertexAttribPointer provoquant un comportement webgl indéfini.

Version 3.js
  • [X] Développeur
  • [x] r85
  • [ ] ...
Navigateur
  • [x] Tous
  • [ ] Chromé
  • [ ]Firefox
  • [ ] Internet Explorer
SE
  • [x] Tous
  • [ ] Les fenêtres
  • [ ] mac OS
  • [ ]Linux
  • [ ] Android
  • [ ] iOS

Commentaire le plus utile

Définir une valeur par défaut pour un argument signifie qu'il est acceptable de ne pas spécifier de valeur du tout. Cependant, dans ce cas, une valeur doit être définie.

De plus, si zéro était la valeur par défaut, la ligne suivante pourrait être divisée par zéro.

three.js ne vérifie généralement pas les valeurs des paramètres.

Tous les 3 commentaires

Définir une valeur par défaut pour un argument signifie qu'il est acceptable de ne pas spécifier de valeur du tout. Cependant, dans ce cas, une valeur doit être définie.

De plus, si zéro était la valeur par défaut, la ligne suivante pourrait être divisée par zéro.

three.js ne vérifie généralement pas les valeurs des paramètres.

  1. Malheureusement, il n'y a aucun moyen de forcer l'utilisateur à définir cette valeur, contrairement à C++, elle sera détectée au moment de la compilation. S'il doit être défini, pourquoi ne pas lancer une erreur au cas où il ne l'est pas au lieu de passer silencieusement et de renvoyer un comportement graphique étrange? En tant que nouvel utilisateur de three.js, j'ai perdu pas mal de temps à découvrir le problème, et je suis presque sûr que je ne serais pas la seule personne à tomber dans ce piège.

  2. Il n'y a aucun moyen d'empêcher l'utilisateur d'attribuer 0 à stride , ce qui causerait le problème de division par zéro que @WestLangley vient de mentionner.

  3. Le document API ici ne donne pas une description claire de ce que signifie stride . D'après mon expérience avec l'API OpenGL/WebGL, le stride ici est le nombre d'éléments primitifs, float ou int, pour l'attribut vertex. Ainsi, le count semble être le nombre de sommets dont les attributs sont définis dans le premier argument array .

  4. Et, corrigez-moi si je me trompe, le this.count ne trouve aucune utilisation dans tout le WebGLRender , tandis que le stride a été utilisé dans l'appel GL critique _gl.vertexAttribPointer . Cela explique également pourquoi après avoir assigné stride 0, ce qui n'est pas tout à fait correct et this.count est maintenant Infinity , cela rend mon rendu normal, car il n'a jamais été utilisé où dans le cadre.

Donc, je suggérerais de mettre en place une protection pour vérifier la valeur de stride et inviter l'utilisateur en cas de undefined ou 0 .

Oui, c'est JavaScript, et nous avons déjà eu ces discussions.

D'autre part, si vous estimez que la documentation est inadéquate ou incorrecte, ce serait le moment idéal pour nous aider à l'améliorer. :)

Dans le code que vous avez référencé, count est le nombre de sommets. La propriété peut ou non être utilisée par le rendu, mais c'est une propriété qui est disponible pour la couche d'application si nécessaire.

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

Bandit picture Bandit  ·  3Commentaires

clawconduce picture clawconduce  ·  3Commentaires

ghost picture ghost  ·  3Commentaires

filharvey picture filharvey  ·  3Commentaires

jlaquinte picture jlaquinte  ·  3Commentaires