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