Three.js: valor padrão ausente de stride para a classe InterleavedBuffer

Criado em 28 mai. 2017  ·  3Comentários  ·  Fonte: mrdoob/three.js

Descrição do problema

Aqui na classe InterleavedBuffer, sugere-se ter o valor padrão 0 para stride. Se o usuário esquecer de especificar stride, this.stride teria o valor undefined , isso seria cascata para var stride = data.stride; e depois para _gl.vertexAttribPointer causando um comportamento webgl indefinido.

Versão Three.js
  • [X] Desenvolvedor
  • [x] r85
  • [ ] ...
Navegador
  • [x] Todos eles
  • [ ] Cromada
  • [ ] Raposa de fogo
  • [ ] Internet Explorer
SO
  • [x] Todos eles
  • [ ] Janelas
  • [ ] Mac OS
  • [ ] Linux
  • [ ] Android
  • [ ] iOS

Comentários muito úteis

Definir um valor padrão para um argumento significa que não há problema em não especificar um valor. No entanto, neste caso, um valor deve ser definido.

Além disso, se zero fosse o padrão, a próxima linha poderia ser dividida por zero.

O three.js geralmente não verifica os valores dos parâmetros.

Todos 3 comentários

Definir um valor padrão para um argumento significa que não há problema em não especificar um valor. No entanto, neste caso, um valor deve ser definido.

Além disso, se zero fosse o padrão, a próxima linha poderia ser dividida por zero.

O three.js geralmente não verifica os valores dos parâmetros.

  1. Infelizmente, não há como forçar o usuário a definir esse valor, ao contrário do C++, ele será detectado durante o tempo de compilação. Se deve ser definido, por que não lançar um erro caso não esteja definido, em vez de passar silenciosamente e retornar um comportamento gráfico estranho? Como um novo usuário do three.js, perdi um bom tempo descobrindo o problema e tenho certeza de que não seria a única pessoa a cair nessa armadilha.

  2. Não há como impedir que o usuário atribua 0 a stride , o que causaria o problema de divisão por zero @WestLangley que acabamos de mencionar.

  3. O documento da API aqui não fornece uma descrição clara do que stride significa. Com base na minha experiência com API OpenGL/WebGL, o stride aqui é o número de elementos primitivos, float ou int, para o atributo vertex. Então o count parece ser o número de vértices cujos atributos são definidos no primeiro argumento array .

  4. E, corrija-me se estiver errado, o this.count não encontra nenhum uso em todo o WebGLRender , enquanto o stride foi usado na chamada GL crítica _gl.vertexAttribPointer . Isso também explica porque depois de atribuir stride 0, que não é exatamente correto e this.count agora é Infinity , ele faz minha renderização voltar ao normal, porque nunca foi usado onde no quadro.

Então, sugiro configurar um cofre para verificar o valor de stride e avisar o usuário no caso de undefined ou 0 .

Sim, isso é JavaScript, e já tivemos essas discussões antes .

Por outro lado, se você achar que a documentação é inadequada ou incorreta, este seria um ótimo momento para nos ajudar a melhorá-la. :)

No código que você fez referência, count é o número de vértices. A propriedade pode ou não ser usada pelo renderizador, mas é uma propriedade que está disponível para a camada de aplicação, se necessário.

Esta página foi útil?
0 / 5 - 0 avaliações