The Surface Points Normals Sequence (0066,0012) attribute provides an explicit normal vector for each point in the Surface Points Sequence (0066,0011) in the Point Coordinates Data (0066,0016) attribute.
If an Item of the Surface Points Normals Sequence (0066,0012) is present the normal for a primitive may be computed by combining the normals for each vertex making up the primitive.
If an Item of the Surface Points Normals Sequence (0066,0012) is not present the normal for a primitive shall be computed by computing the cross product of two segments of the primitive. The segments shall be formed using the primitive definitions as specified within the Surface Mesh Primitives Sequence (0066,0013). The primitive vertices are taken in the order specified within the Primitive Point Index List (0066,0029) attribute. Figure C.27.1.1-3 shows the method to compute the normal:
Figure C.27.1.1-3 - Triangle Normal Computation
The computed normal shall point in the direction of the outside of the surface.
For Triangle Strip or Triangle Fan primitives (see Section C.27.4), the normal direction is determined by the order of the points referenced by the first triangle in the strip or fan. When constructing a list of triangles from a triangle strip, the order of the points must be flipped for every second triangle to maintain consistency in the normal directions for the triangle.