Three.js: A geometria sem faces ainda é renderizada na malha

Criado em 7 ago. 2017  ·  3Comentários  ·  Fonte: mrdoob/three.js

A ideia é que minha geometria sempre tenha os mesmos vértices, mas as faces são adicionadas opcionalmente. No entanto, ele decide desenhar coisas aleatoriamente de qualquer maneira. Demonstração aqui .

Bug Won't fix

Comentários muito úteis

Eu depurei esse problema hoje. Geometry é convertido internamente em BufferGeometry . O resultado desta conversão depende do tipo de objeto (malha, linha, etc.). Portanto, no exemplo de @makc , a geometria é convertida como a geometria de um objeto Line . Isso criará um atributo de posição e cor. Quando a instância de Mesh é renderizada com o mesmo objeto Geometry , o renderizador retorna a mesma instância em cache de BufferGeometry .

https://github.com/mrdoob/three.js/blob/ec67749b0767e2727deebd52da2dbd3a4e7ab6a2/src/renderers/webgl/WebGLGeometries.js#L63 -L65

Esta é a razão pela qual você vê esses triângulos verdes na demonstração. Mesh e Line compartilham o mesmo BufferGeometry interno e o interpretam de maneira diferente. Acho que podemos resolver esse problema se tentarmos respeitar o tipo de objeto ao armazenar em cache BufferGeometry .

Ou apenas recomendamos usar BufferGeometry em primeiro lugar: sweat_smile:

Todos 3 comentários

Uma questão oposta aqui - não vemos rostos onde eles são definidos. Então, talvez seja porque a geometria é compartilhada entre a linha e a malha.

Eu depurei esse problema hoje. Geometry é convertido internamente em BufferGeometry . O resultado desta conversão depende do tipo de objeto (malha, linha, etc.). Portanto, no exemplo de @makc , a geometria é convertida como a geometria de um objeto Line . Isso criará um atributo de posição e cor. Quando a instância de Mesh é renderizada com o mesmo objeto Geometry , o renderizador retorna a mesma instância em cache de BufferGeometry .

https://github.com/mrdoob/three.js/blob/ec67749b0767e2727deebd52da2dbd3a4e7ab6a2/src/renderers/webgl/WebGLGeometries.js#L63 -L65

Esta é a razão pela qual você vê esses triângulos verdes na demonstração. Mesh e Line compartilham o mesmo BufferGeometry interno e o interpretam de maneira diferente. Acho que podemos resolver esse problema se tentarmos respeitar o tipo de objeto ao armazenar em cache BufferGeometry .

Ou apenas recomendamos usar BufferGeometry em primeiro lugar: sweat_smile:

@mrdoob , sugiro introduzir um novo rótulo Wont't fix , atribuí-lo ao fascículo e fechá-lo. Não acho que faça sentido adicionar uma correção ao renderizador se o projeto for parar de renderizar Geometry qualquer maneira. A solução para esse problema é o uso de BufferGeometry .

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