2013-06-15 11 views
11

Utworzono niestandardową geometrię w pliku Three.js. Teraz chciałbym stworzyć siatkę, która wykorzystuje materiał Lambert o gładkiej warstwie. Za pomocą pętli, mam stworzył tablicę wierzchołków, a następnie twarze, a potem nazwałemThree.js - problemy z płynnym cieniowaniem materiału Lamberta na niestandardowej geometrii

geometry.computeCentroids(); 
geometry.computeFaceNormals(); 
geometry.computeVertexNormals(); 

var colorMaterial = new THREE.MeshLambertMaterial({color: 0x0000ff, side: THREE.DoubleSide}); 
var mesh = new THREE.Mesh(geometry, colorMaterial); 
scene.add(mesh); 

Rezultatem jest niemal doskonały, oprócz tego, że wydaje się, że materiał jest za pomocą shading: THREE.FlatShading jak widać poniżej:

enter image description here

, podczas gdy spodziewałem się domyślnego wyglądu, który normalnie oczekuje od shading: THREE.SmoothShading. Co muszę dodać/zmienić, aby uzyskać gładkie cieniowanie Lamberta?

(Jeśli to nie pomaga, kompletnym przykładem na żywo jest http://stemkoski.github.io/Three.js/Marching-Cubes.html oraz geometrii i siatki są tworzone wokół linii 250-280).

Odpowiedz

24

To dlatego sąsiadujące twarze nie dzielić wierzchołki w modelu.

Jeśli zadzwonisz pod numer geometry.mergeVertices() zaraz po zakończeniu tworzenia geometrii, a przed wywołaniem geometry.computeVertexNormals(), twoje cieniowanie będzie wyglądać gładko.

three.js r.58

+5

Idealne, wielkie dzięki! Zasługujesz na znaczek geniusza StackOverflow three.js :) –

Powiązane problemy