Three.js: fehlender Standardwert der Schrittweite für die InterleavedBuffer-Klasse

Erstellt am 28. Mai 2017  ·  3Kommentare  ·  Quelle: mrdoob/three.js

Beschreibung des Problems

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.

Three.js-Version
  • [X] Entw
  • [x] r85
  • [ ] ...
Browser
  • [x] Alle von ihnen
  • [ ] Chrom
  • [ ] Feuerfuchs
  • [ ] Internet Explorer
Betriebssystem
  • [x] Alle von ihnen
  • [ ] Fenster
  • [ ] Mac OS
  • [] Linux
  • [ ] Android
  • [ ] iOS

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.

Alle 3 Kommentare

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.

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

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

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

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

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen