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