---
name: "SoNormalCache"
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/SoNormalCache"
---

# SoNormalCache(3)

The SoNormalCache class is used to hold cached normals.

## NAME

SoNormalCache - The **SoNormalCache** class is used to hold cached normals.

## SYNOPSIS

\#include \<Inventor/caches/SoNormalCache.h\>

Inherits **SoCache**.

### Public Member Functions

**SoNormalCache** (**SoState** \*const state)\
 virtual **~SoNormalCache** ()\
 void **set** (const int num, const **SbVec3f** \*const normals)\
 void **set** (**SoNormalGenerator** \*generator)\
 int **getNum** (void) const\
 const **SbVec3f** \* **getNormals** (void) const\
 int **getNumIndices** (void) const\
 const int32\_t \* **getIndices** (void) const\
 void **generatePerVertex** (const **SbVec3f** \*const coords, const unsigned int numcoords, const int32\_t \*coordindices, const int numcoordindices, const float crease\_angle, const **SbVec3f** \*facenormals=NULL, const int numfacenormals=-1, const SbBool ccw=TRUE, const SbBool tristrip=FALSE)\
 void **generatePerFace** (const **SbVec3f** \*const coords, const unsigned int numcoords, const int32\_t \*coordindices, const int numcoorindices, const SbBool ccw)\
 void **generatePerFaceStrip** (const **SbVec3f** \*const coords, const unsigned int numcoords, const int32\_t \*coordindices, const int numcoorindices, const SbBool ccw)\
 void **generatePerStrip** (const **SbVec3f** \*const coords, const unsigned int numcoords, const int32\_t \*coordindices, const int numcoorindices, const SbBool ccw)\
 void **generatePerVertexQuad** (const **SbVec3f** \*const coords, const unsigned int numcoords, const int vPerRow, const int vPerColumn, const SbBool ccw)\
 void **generatePerFaceQuad** (const **SbVec3f** \*const coords, const unsigned int numcoords, const int vPerRow, const int vPerColumn, const SbBool ccw)\
 void **generatePerRowQuad** (const **SbVec3f** \*const coords, const unsigned int numcoords, const int vPerRow, const int vPerColumn, const SbBool ccw)\

Public Member Functions inherited from **SoCache** **SoCache** (**SoState** \*const state)\
 void **ref** (void)\
 void **unref** (**SoState** \*state=NULL)\
 void **addElement** (const **SoElement** \*const elem)\
 virtual void **addCacheDependency** (const **SoState** \*state, **SoCache** \*cache)\
 virtual SbBool **isValid** (const **SoState** \*state) const\
 const **SoElement** \* **getInvalidElement** (const **SoState** \*const state) const\
 void **invalidate** (void)\

### Additional Inherited Members

Protected Member Functions inherited from **SoCache** virtual void **destroy** (**SoState** \*state)\
 virtual **~SoCache** ()\

## Detailed Description

The **SoNormalCache** class is used to hold cached normals.

As an extension to the original SGI Open Inventor v2.1 API, it is also possible to generate normals using this class.

It is more powerful and easier to use than the **SoNormalGenerator** class. It is possible to generate normals per vertex with indices (using much less memory than plain per vertex normals), and it contains special methods to generate normals for triangle strips and quads.

## Constructor & Destructor Documentation

### SoNormalCache::SoNormalCache (SoState \*const state)

Constructor with *state* being the current state.

### SoNormalCache::~SoNormalCache () \[virtual\]

Destructor

## Member Function Documentation

### void SoNormalCache::set (const int num, const SbVec3f \*const normals)

Sets an array of normals for this cache. The normals will not be deleted when the instance is deleted.

### void SoNormalCache::set (SoNormalGenerator \* generator)

Uses a normal generator in this cache. The normal generator will be deleted when the cache is deleted or reset.

### int SoNormalCache::getNum (void ) const

Returns the number of normals in the cache.

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

Return a pointer to the normals in this cache.

### int SoNormalCache::getNumIndices (void ) const

Returns the number of indices in this cache. Normals are generated with PER\_VERTEX\_INDEXED binding.

### const int32\_t \* SoNormalCache::getIndices (void ) const

Returns the normal indices.

### void SoNormalCache::generatePerVertex (const SbVec3f \*const coords, const unsigned int numcoords, const int32\_t \* vindex, const int numvi, const float crease\_angle, const SbVec3f \* facenormals = NULL, const int numfacenormals = -1, const SbBool ccw = TRUE, const SbBool tristrip = FALSE)

Generates normals for each vertex for each face. It is possible to specify face normals if these have been calculated somewhere else, otherwise the face normals will be calculated before the vertex normals are calculated. *tristrip* should be TRUE if the geometry consists of triangle strips.

### void SoNormalCache::generatePerFace (const SbVec3f \*const coords, const unsigned int numcoords, const int32\_t \* cind, const int nv, const SbBool ccw)

Generates face normals for the faceset defined by *coords* and *cind*.

### void SoNormalCache::generatePerFaceStrip (const SbVec3f \*const coords, const unsigned int numcoords, const int32\_t \* cind, const int nv, const SbBool ccw)

Generates face normals for triangle strips.

### void SoNormalCache::generatePerStrip (const SbVec3f \*const coords, const unsigned int numcoords, const int32\_t \* cind, const int nv, const SbBool ccw)

Generates one normal per triangle strips (averages all triangle normals).

### void SoNormalCache::generatePerVertexQuad (const SbVec3f \*const coords, const unsigned int numcoords, const int vPerRow, const int vPerColumn, const SbBool ccw)

Generates PER\_VERTEX normals for quad data.

### void SoNormalCache::generatePerFaceQuad (const SbVec3f \*const coords, const unsigned int numcoords, const int vPerRow, const int vPerColumn, const SbBool ccw)

Generates per face normals for quad data.

### void SoNormalCache::generatePerRowQuad (const SbVec3f \*const coords, const unsigned int numcoords, const int vPerRow, const int vPerColumn, const SbBool ccw)

Generates per row normals for quad data.

## Author

Generated automatically by Doxygen for Coin from the source code.
