NAME
SoShapeHints -
The SoShapeHints class is a node containing hints about how to render
geometry.
The SoShapeHints node is used to set up clues to the rendering
subsystem about how particular aspects of the subsequent geometry in
the scene graph should be drawn.
SYNOPSIS
#include <Inventor/nodes/SoShapeHints.h>
Inherits SoNode.
Public Types
enum VertexOrdering { UNKNOWN_ORDERING =
SoShapeHintsElement::UNKNOWN_ORDERING, CLOCKWISE =
SoShapeHintsElement::CLOCKWISE, COUNTERCLOCKWISE =
SoShapeHintsElement::COUNTERCLOCKWISE }
enum ShapeType { UNKNOWN_SHAPE_TYPE =
SoShapeHintsElement::UNKNOWN_SHAPE_TYPE, SOLID =
SoShapeHintsElement::SOLID }
enum FaceType { UNKNOWN_FACE_TYPE =
SoShapeHintsElement::UNKNOWN_FACE_TYPE, CONVEX =
SoShapeHintsElement::CONVEX }
enum WindingType { NO_WINDING_TYPE = 0 }
Public Member Functions
SoShapeHints (void)
virtual void doAction (SoAction *action)
virtual void GLRender (SoGLRenderAction *action)
virtual void callback (SoCallbackAction *action)
virtual void getBoundingBox (SoGetBoundingBoxAction *action)
virtual void pick (SoPickAction *action)
Static Public Member Functions
static void initClass (void)
Public Attributes
SoSFEnum vertexOrdering
SoSFEnum shapeType
SoSFEnum faceType
SoSFEnum windingType
SoSFBool useVBO
SoSFFloat creaseAngle
Protected Member Functions
virtual ~SoShapeHints ()
Detailed Description
The SoShapeHints class is a node containing hints about how to render
geometry.
The SoShapeHints node is used to set up clues to the rendering
subsystem about how particular aspects of the subsequent geometry in
the scene graph should be drawn.
The default settings of the rendering system is tuned towards
programmer convenience. For instance, the default is to render both
sides of all polygons to make sure we avoid any ’holes’ in the geometry
if the vertex ordering should happen to differ for different polygons.
If the programmer gives up some of this convenience and uses
SoShapeHints nodes to more closely specify information about the scene
graph geometry, the clues given by the SoShapeHints node(s) will then
be used by the rendering subsystem to avoid certain costly operations.
Significant gains in rendering speed could be seen as a result.
Be aware that the way backface culling and two-sided lighting is
decided by the rendering system is not at all intuitive. Here are the
common rules of how primitive shapes will render themselves with regard
to how the SoShapeHints::vertexOrdering and SoShapeHints::shapeType
fields are set:
· vertexOrdering == CLOCKWISE or COUNTERCLOCKWISE, shapeType == SOLID:
causes primitives to be backface culled and rendered with one-sided
lighting.
· vertexOrdering == CLOCKWISE or COUNTERCLOCKWISE, shapeType ==
UNKNOWN_SHAPE_TYPE: primitives are not backface culled, and they are
rendered with two-sided lighting.
· vertexOrdering == UNKNOWN_ORDERING, any shapeType: primitives are not
backface culled, and they are rendered with one-sided lighting. The
OpenGL vertex ordering will be set to counter clockwise ordering.
The UNKNOWN_ORDERING enum has a special and non-intuitive meaning. The
ordering is really set to counter clockwise -- in OpenGL and when
generating normals. However, if you want to render your geometry with
one-sided lighting and backface culling disabled, you have to use this
enum value, and your polygons need to be in counter clockwise ordering.
FILE FORMAT/DEFAULTS:
ShapeHints {
vertexOrdering UNKNOWN_ORDERING
shapeType UNKNOWN_SHAPE_TYPE
faceType CONVEX
creaseAngle 0
}
Member Enumeration Documentation
enum SoShapeHints::VertexOrdering Enumeration of available ways to specify
ordering of vertices for a polygon.
Enumerator:
UNKNOWN_ORDERING
Ordering not known, render both sides of the polygon.
CLOCKWISE
Vertices are specified in a clockwise order.
COUNTERCLOCKWISE
Vertices are specified in a counter-clockwise order.
enum SoShapeHints::ShapeType Enumeration of different shape types.
Enumerator:
UNKNOWN_SHAPE_TYPE
Nothing known about the shape, be conservative when rendering.
SOLID The subsequent shapes in the graph are all known to be
completely ’closed’, solid 3D shapes. Backface culling will be
done if vertexOrdering is known.
enum SoShapeHints::FaceType Enumeration of polygon face types.
Enumerator:
UNKNOWN_FACE_TYPE
Signifies: nothing is known about subsequent polygon data, be
conservative when rendering.
All polygons in the scene will be analyzed to see if they needs to be
tessellated (broken up) into triangles before passed on to the
underlying immediate mode rendering system.
The OpenGL rendering system handles most complex polygon types, but not
all: it can for instance have problems with many-sided, concave
polygons (concave polygons are ’hollow’, that is: rounded inwards).
Coin’s internal tessellator will most often handle the cases that
OpenGL fails on.
So if you are seeing weird artifacts in how complex polygons are
rendered, try to change the SoShapeHints::faceType field to this value
and see if they are then rendered correctly.
Beware that turning on this functionality might have the effect of
making the rendering performance worse. If it has a noticable effect on
your particular scenegraph, we advise that you investigate whether you
could change how the polygons are generated for Coin rendering and then
avoid using this flag.
CONVEX Subsequent faces are all convex, so turn off the check for and
tessellation of inconvex faces.
Subsequent polygons from faceset-type nodes (like SoFaceSet and
SoIndexedFaceSet) will be sent unmodified to OpenGL, thereby assuming
that the polygons are in a form handled by OpenGL.
Constructor & Destructor Documentation
SoShapeHints::SoShapeHints (void) Constructor.
SoShapeHints::~SoShapeHints () [protected, virtual] Destructor.
Member Function Documentation
void SoShapeHints::initClass (void) [static] Sets up initialization for
data common to all instances of this class, like submitting necessary
information to the Coin type system.
Reimplemented from SoNode.
void SoShapeHints::doAction (SoAction * action) [virtual] This function
performs the typical operation of a node for any action.
Reimplemented from SoNode.
void SoShapeHints::GLRender (SoGLRenderAction * action) [virtual] Action
method for the SoGLRenderAction.
This is called during rendering traversals. Nodes influencing the
rendering state in any way or who wants to throw geometry primitives at
OpenGL overrides this method.
Reimplemented from SoNode.
void SoShapeHints::callback (SoCallbackAction * action) [virtual] Action
method for SoCallbackAction.
Simply updates the state according to how the node behaves for the
render action, so the application programmer can use the
SoCallbackAction for extracting information about the scene graph.
Reimplemented from SoNode.
void SoShapeHints::getBoundingBox (SoGetBoundingBoxAction * action)
[virtual] Action method for the SoGetBoundingBoxAction.
Calculates bounding box and center coordinates for node and modifies
the values of the action to encompass the bounding box for this node
and to shift the center point for the scene more towards the one for
this node.
Nodes influencing how geometry nodes calculates their bounding box also
overrides this method to change the relevant state variables.
Reimplemented from SoNode.
void SoShapeHints::pick (SoPickAction * action) [virtual] Action method for
SoPickAction.
Does common processing for SoPickAction action instances.
Reimplemented from SoNode.
Member Data Documentation
SoSFEnum SoShapeHints::vertexOrdering Specifies how vertices are ordered
for polygon faces.
Set this field to SoShapeHints::CLOCKWISE or
SoShapeHints::COUNTERCLOCKWISE if possible to turn on backface culling
and thereby optimize rendering.
Default value is SoShapeHints::UNKNOWN_ORDERING.
SoSFEnum SoShapeHints::shapeType Hint about whether or not shapes are known
to be ’closed’. Default value is SoShapeHints::UNKNOWN_SHAPE_TYPE.
SoSFEnum SoShapeHints::faceType Hint about whether or not polygon faces are
known to be convex. Default value is SoShapeHints::CONVEX.
SoSFFloat SoShapeHints::creaseAngle When normals are automatically
generated by Coin (i.e. SoNormal nodes are not used), this is the
smallest angle between two faces where we would still calculate normals
to do flatshading.
If the angle between the normals of two neighboring faces is less than
the value of this field, the faces will be smoothshaded around their
common edge.
The angle is specified in radians, and the default value is 0.0,
meaning no smoothing will be done by default.
Author
Generated automatically by Doxygen for Coin from the source code.