---
name: "SoNormalGenerator"
section: "3"
platform: "linux"
package: "coin"
version: "1:4.0.10-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/SoNormalGenerator"
---

# SoNormalGenerator(3)

The SoNormalGenerator class is used to generate normals.

## NAME

SoNormalGenerator - The **SoNormalGenerator** class is used to generate normals.

## SYNOPSIS

\#include \<include/Inventor/misc/SoNormalGenerator.h\>

### Public Member Functions

**SoNormalGenerator** (const SbBool ccw, const int approxVertices=64)\
 **~SoNormalGenerator** ()\
 void **reset** (const SbBool ccw)\
 void **beginPolygon** ()\
 void **polygonVertex** (const **SbVec3f** &v)\
 void **endPolygon** ()\
 void **triangle** (const **SbVec3f** &v0, const **SbVec3f** &v1, const **SbVec3f** &v2)\
 void **quad** (const **SbVec3f** &v0, const **SbVec3f** &v1, const **SbVec3f** &v2, const **SbVec3f** &v3)\
 void **generate** (const float creaseAngle, const int32\_t \*striplens=NULL, const int numstrips=0)\
 void **generatePerStrip** (const int32\_t \*striplens, const int numstrips)\
 void **generatePerFace** (void)\
 void **generateOverall** (void)\
 int **getNumNormals** () const\
 void **setNumNormals** (const int num)\
 const **SbVec3f** \* **getNormals** () const\
 const **SbVec3f** & **getNormal** (const int32\_t i) const\
 void **setNormal** (const int32\_t index, const **SbVec3f** &normal)\

## Detailed Description

The **SoNormalGenerator** class is used to generate normals.

FIXME: document properly

## Constructor & Destructor Documentation

### SoNormalGenerator::SoNormalGenerator (const SbBool isccw, const int approxVertices = 64)

Constructor with *isccw* indicating if polygons are specified in counterclockwise order. The *approxVertices* can be used to optimize normal generation.

### SoNormalGenerator::~SoNormalGenerator ()

Destructor.

## Member Function Documentation

### void SoNormalGenerator::reset (const SbBool ccwarg)

Resets the normal generator, making it possible to reuse it without allocating a new one.

This function is an extension for Coin, and it is not available in the original SGI Open Inventor v2.1 API.\

**Since**

Coin 2.0

### void SoNormalGenerator::beginPolygon (void )

Signals the start of a new polygon.

**See also**

**SoNormalGenerator::polygonVertex()**

**SoNormalGenerator::endPolygon()**

### void SoNormalGenerator::polygonVertex (const SbVec3f & v)

Adds a vertex to the current polygon.

**See also**

**SoNormalGenerator::beginPolygon()**

**SoNormalGenerator::endPolygon()**

### void SoNormalGenerator::endPolygon (void )

Signals the end of a polygon.

**See also**

**SoNormalGenerator::beginPolygon()**

**SoNormalGenerator::polygonVertex()**

### void SoNormalGenerator::triangle (const SbVec3f & v0, const SbVec3f & v1, const SbVec3f & v2)

Convenience method for adding a triangle.

### void SoNormalGenerator::quad (const SbVec3f & v0, const SbVec3f & v1, const SbVec3f & v2, const SbVec3f & v3)

Convenience method for adding a quad

### void SoNormalGenerator::generate (const float creaseAngle, const int32\_t \* striplens = NULL, const int numstrips = 0)

Triggers the normal generation. Normals are generated using *creaseAngle* to find which edges should be flat-shaded and which should be smooth-shaded.

If normals are generated for triangle strips, the *striplens* and *numstrips* must be supplied. See src/nodes/SoTriangleStripSet.cpp (generateDefaultNormals()) for an example on how you send triangle strip information to this generator. It's not trivial, since you have to know how OpenGL/Coin generate triangles from triangle strips.

### void SoNormalGenerator::generatePerStrip (const int32\_t \* striplens, const int numstrips)

Generates one normal per strip by averaging face normals.

### void SoNormalGenerator::generatePerFace (void )

Generates the normals per face. Use this when PER\_FACE normal binding is needed. This method is not part of the OIV API.

### void SoNormalGenerator::generateOverall (void )

Generates one overall normal by averaging all face normals. Use when normal binding is OVERALL. This method is not part of the OIV API.

### int SoNormalGenerator::getNumNormals (void ) const

Returns the number of normals generated.

### void SoNormalGenerator::setNumNormals (const int num)

Sets the number of generated normals. This method is not supported in Coin, and is provided for API compatibility only.

### const SbVec3f \* SoNormalGenerator::getNormals (void ) const

Returns a pointer to the generated normals.

### const SbVec3f & SoNormalGenerator::getNormal (const int32\_t i) const

Returns the normal at index *i*.

**See also**

**SoNormalGenerator::getNumNormals()**

### void SoNormalGenerator::setNormal (const int32\_t index, const SbVec3f & normal)

Sets the normal at index *index* to *normal*. This method is not supported in Coin, and is provided for API compatibility only.

## Author

Generated automatically by Doxygen for Coin from the source code.
