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
.
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
.
Comentários muito úteis
Eu depurei esse problema hoje.
Geometry
é convertido internamente emBufferGeometry
. 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 objetoLine
. Isso criará um atributo de posição e cor. Quando a instância deMesh
é renderizada com o mesmo objetoGeometry
, o renderizador retorna a mesma instância em cache deBufferGeometry
.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
eLine
compartilham o mesmoBufferGeometry
interno e o interpretam de maneira diferente. Acho que podemos resolver esse problema se tentarmos respeitar o tipo de objeto ao armazenar em cacheBufferGeometry
.Ou apenas recomendamos usar
BufferGeometry
em primeiro lugar: sweat_smile: