Three.js: falta el valor predeterminado de zancada para la clase InterleavedBuffer

Creado en 28 may. 2017  ·  3Comentarios  ·  Fuente: mrdoob/three.js

Descripción del problema

Aquí en la clase InterleavedBuffer, se sugiere tener el valor predeterminado 0 para zancada. Si el usuario olvida especificar stride, this.stride tendría el valor undefined , esto caería en cascada a var stride = data.stride; , y luego a _gl.vertexAttribPointer causando un comportamiento webgl indefinido.

Versión de tres.js
  • [X] desarrollo
  • [x] r85
  • [ ] ...
Navegador
  • [x] Todos ellos
  • [ ] Cromo
  • [ ] firefox
  • [ ] Explorador de Internet
sistema operativo
  • [x] Todos ellos
  • [ ] ventanas
  • [ ] Mac OS
  • [ ] linux
  • [ ] androide
  • [ ] iOS

Comentario más útil

Establecer un valor predeterminado para un argumento significa que está bien no especificar ningún valor. Sin embargo, en este caso, se debe establecer un valor.

Además, si cero fuera el valor predeterminado, la siguiente línea podría dividirse por cero.

three.js generalmente no verifica los valores de los parámetros.

Todos 3 comentarios

Establecer un valor predeterminado para un argumento significa que está bien no especificar ningún valor. Sin embargo, en este caso, se debe establecer un valor.

Además, si cero fuera el valor predeterminado, la siguiente línea podría dividirse por cero.

three.js generalmente no verifica los valores de los parámetros.

  1. Desafortunadamente, no hay forma de obligar al usuario a establecer ese valor, a diferencia de C++, se detectará durante el tiempo de compilación. Si debe configurarse, ¿por qué no arrojar un error en caso de que no esté configurado en lugar de pasar silenciosamente y devolver un comportamiento gráfico extraño? Como nuevo usuario de three.js, perdí bastante tiempo averiguando el problema y estoy bastante seguro de que no sería la única persona que caería en este escollo.

  2. No hay forma de evitar que el usuario asigne 0 a stride , lo que causaría el problema de dividir por cero que @WestLangley acaba de mencionar.

  3. El documento de API aquí no da una descripción clara de lo que significa stride . Basado en mi experiencia con OpenGL/WebGL API, el stride aquí es el número de elementos primitivos, float o int, para el atributo de vértice. Entonces count parece ser el número de vértices cuyos atributos están definidos en el primer argumento array .

  4. Y, corríjame si me equivoco, el this.count no encuentra ningún uso en todo el WebGLRender , mientras que el stride se ha utilizado en la llamada crítica de GL _gl.vertexAttribPointer . Esto también explica por qué después de asignar stride 0, que no es exactamente correcto y this.count ahora es Infinity , hace que mi renderizado vuelva a la normalidad, porque nunca se ha usado donde en el marco.

Por lo tanto, sugeriría configurar una protección segura para verificar el valor de stride y avisar al usuario en caso de undefined o 0 .

Sí, esto es JavaScript, y hemos tenido estas discusiones antes .

Por otro lado, si cree que la documentación es inadecuada o incorrecta, este sería un buen momento para ayudarnos a mejorarla. :)

En el código al que hace referencia, count es el número de vértices. La propiedad puede, o no, ser utilizada por el renderizador, pero es una propiedad que está disponible para la capa de aplicación si es necesario.

¿Fue útil esta página
0 / 5 - 0 calificaciones