| java.lang.Object com.sun.j3d.utils.geometry.NormalGenerator
NormalGenerator | public class NormalGenerator (Code) | | 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.
|
NormalGenerator | public NormalGenerator(double radians)(Code) | | Constructor. Construct a NormalGenerator object with creaseAngle
set to the given value.
|
NormalGenerator | public NormalGenerator()(Code) | | Constructor. Construct a NormalGenerator object with creaseAngle
set to 44 degrees (0.767944871 radians).
|
convertBackToOldPrim | void convertBackToOldPrim(GeometryInfo geom, int oldPrim, int oldStripCounts)(Code) | | Used when the user calls the NormalGenerator and not
the Stripifier or Triangulator. We had to convert
the user's data to indexed triangles before we could
generate normals, so now we need to switch back to
the original format.
|
generateNormals | public void generateNormals(GeometryInfo geom)(Code) | | 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.
|
getCreaseAngle | public double getCreaseAngle()(Code) | | Returns the current value of the crease angle, in radians.
|
setCreaseAngle | public void setCreaseAngle(double radians)(Code) | | 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).
|
|
|