Hier bei der InterleavedBuffer-Klasse wird empfohlen, den Standardwert 0 für Stride zu haben. Wenn der Benutzer vergisst, Schrittweite anzugeben, hätte this.stride
den Wert undefined
, dies würde zu var stride = data.stride;
und weiter zu _gl.vertexAttribPointer
kaskadieren, was zu undefiniertem Webgl-Verhalten führt.
Das Festlegen eines Standardwerts für ein Argument bedeutet, dass es in Ordnung ist, überhaupt keinen Wert anzugeben. In diesem Fall muss jedoch ein Wert eingestellt werden.
Wenn Null der Standardwert wäre, könnte die nächste Zeile auch durch Null dividiert werden.
three.js überprüft generell keine Parameterwerte.
Leider gibt es keine Möglichkeit, den Benutzer zu zwingen, diesen Wert festzulegen, im Gegensatz zu C++ wird er während der Kompilierzeit erkannt. Wenn es gesetzt werden muss, warum nicht einen Fehler ausgeben, falls es nicht gesetzt ist, anstatt stillschweigend durchzugehen und ein seltsames Grafikverhalten zurückzugeben? Als neuer Benutzer von three.js habe ich einige Zeit damit verschwendet, das Problem herauszufinden, und ich bin mir ziemlich sicher, dass ich nicht die einzige Person sein würde, die in diese Falle tappen würde.
Es gibt keine Möglichkeit, den Benutzer daran zu hindern, stride
zuzuweisen, was zu dem gerade erwähnten Problem der Division durch Null führen würde, das @WestLangley erwähnt hat.
Das API-Dokument hier gibt keine klare Beschreibung dessen, was stride
bedeutet. Basierend auf meiner Erfahrung mit der OpenGL/WebGL-API ist das stride
hier die Anzahl der primitiven Elemente, Float oder Int, für das Vertex-Attribut. Das count
scheint also die Anzahl der Scheitelpunkte zu sein, deren Attribute im ersten Argument array
definiert sind.
Und, korrigieren Sie mich, wenn ich falsch liege, das this.count
findet im gesamten WebGLRender keine Verwendung, während das stride
im kritischen GL-Aufruf _gl.vertexAttribPointer
verwendet wurde. stride
0, was nicht ganz korrekt ist und this.count
jetzt Infinity
ist, mein Rendering wieder normal wird, da es noch nie verwendet wurde wo im Rahmen.
Daher würde ich vorschlagen, eine Sicherheitsvorrichtung einzurichten, um den Wert von stride
zu überprüfen und den Benutzer im Falle von undefined
oder 0
.
Ja, das ist JavaScript, und wir haben diese Diskussionen schon einmal geführt.
Wenn Sie andererseits der Meinung sind, dass die Dokumentation unzureichend oder falsch ist, wäre dies ein guter Zeitpunkt, um uns bei der Verbesserung zu helfen. :)
In dem Code, auf den Sie verwiesen haben, ist count
die Anzahl der Scheitelpunkte. Die Eigenschaft kann vom Renderer verwendet werden oder nicht, aber es ist eine Eigenschaft, die der Anwendungsschicht bei Bedarf zur Verfügung steht.
Hilfreichster Kommentar
Das Festlegen eines Standardwerts für ein Argument bedeutet, dass es in Ordnung ist, überhaupt keinen Wert anzugeben. In diesem Fall muss jedoch ein Wert eingestellt werden.
Wenn Null der Standardwert wäre, könnte die nächste Zeile auch durch Null dividiert werden.
three.js überprüft generell keine Parameterwerte.