com.sun.j3d.utils.geometry

## Class NormalGenerator

- java.lang.Object
- - com.sun.j3d.utils.geometry.NormalGenerator

-     public class NormalGenerator
      extends java.lang.Object

  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.

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `NormalGenerator()` Constructor.
    `NormalGenerator(double radians)` Constructor.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `generateNormals(GeometryInfo geom)` Generate normals for the GeometryInfo object.
    `double` | `getCreaseAngle()` Returns the current value of the crease angle, in radians.
    `void` | `setCreaseAngle(double radians)` Set the crease angle.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### NormalGenerator

          public NormalGenerator(double radians)

      Constructor. Construct a NormalGenerator object with creaseAngle set to the given value.

    - #### NormalGenerator

          public NormalGenerator()

      Constructor. Construct a NormalGenerator object with creaseAngle set to 44 degrees (0.767944871 radians).

  - ### Method Detail

    - #### generateNormals

          public void generateNormals(GeometryInfo geom)

      Generate normals for the GeometryInfo object. If the GeometryInfo object didn't previously contain indexed data, indexes are made by collapsing identical positions into a single index. Any normal information previously contained in the GeometryInfo object is lost. Strips and Fans are converted into individual triangles for Normal generation, but are stitched back together if GeometryInfo.getGeometryArray() (or getIndexedGeometryArray()) is called without stripifying first.

    - #### setCreaseAngle

          public void setCreaseAngle(double radians)

      Set the crease angle. 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. Clamped to 0 <= creaseAngle <= PI. Optimizations are made for creaseAngle == 0 (facet normals) and creaseAngle == PI (smooth shading).

    - #### getCreaseAngle

          public double getCreaseAngle()

      Returns the current value of the crease angle, in radians.

Copyright 1996-2008 Sun Microsystems, Inc. All Rights Reserved. Use is subject to license terms.