The NormalGenerator utility will calculate and fill in the normals
of a GeometryInfo object. The calculated normals are estimated based
on an analysis of the indexed coordinate information. If your data
isn't indexed, index lists will be created.
If two (or more) triangles in the model share the same coordinate
index then the normal generator will attempt to generate one normal
for the vertex, resulting in a "smooth" looking surface. If two
coordinates don't have the same index then they will have two
separate normals, even if they have the same position. This will
result in a "crease" in your object. If you suspect that your
data isn't properly indexed, call GeometryInfo.recomputeIndexes().
Of course, sometimes your model *has* a crease in it. That's what
creaseAngle is. If two triangles' normals differ by more than
creaseAngle, then the vertex will get two separate normals, creating a
discontinuous crease in the model. This is perfect for the edge
of a table or the corner of a cube, for instance.
If two (or more) triangles in the model share the same coordinate index then the normal generator will attempt to generate one normal for the vertex, resulting in a "smooth" looking surface. If two coordinates don't have the same index then they will have two separate normals, even if they have the same position. This will result in a "crease" in your object. If you suspect that your data isn't properly indexed, call GeometryInfo.recomputeIndexes().
Of course, sometimes your model *has* a crease in it. That's what creaseAngle is. If two triangles' normals differ by more than creaseAngle, then the vertex will get two separate normals, creating a discontinuous crease in the model. This is perfect for the edge of a table or the corner of a cube, for instance.