Coin  4.0.3
Coin3D core library
Loading...
Searching...
No Matches
SoTextureCombine Class Reference

The SoTextureCombine class is a node for setting texture combine functions. More...

#include <Inventor/nodes/SoTextureCombine.h>

Inheritance diagram for SoTextureCombine:
SoNode SoFieldContainer SoBase

Public Types

enum  Operand { SRC_COLOR = SoTextureCombineElement::SRC_COLOR , ONE_MINUS_SRC_COLOR = SoTextureCombineElement::ONE_MINUS_SRC_COLOR , SRC_ALPHA = SoTextureCombineElement::SRC_ALPHA , ONE_MINUS_SRC_ALPHA = SoTextureCombineElement::ONE_MINUS_SRC_ALPHA }
 
enum  Operation {
  REPLACE = SoTextureCombineElement::REPLACE , MODULATE = SoTextureCombineElement::MODULATE , ADD = SoTextureCombineElement::ADD , ADD_SIGNED = SoTextureCombineElement::ADD_SIGNED ,
  SUBTRACT = SoTextureCombineElement::SUBTRACT , INTERPOLATE = SoTextureCombineElement::INTERPOLATE , DOT3_RGB = SoTextureCombineElement::DOT3_RGB , DOT3_RGBA = SoTextureCombineElement::DOT3_RGBA
}
 
enum  Source { PRIMARY_COLOR = SoTextureCombineElement::PRIMARY_COLOR , TEXTURE = SoTextureCombineElement::TEXTURE , CONSTANT = SoTextureCombineElement::CONSTANT , PREVIOUS = SoTextureCombineElement::PREVIOUS }
 
- Public Types inherited from SoNode
enum  NodeType {
  INVENTOR = 0x0000 , VRML1 = 0x0001 , VRML2 = 0x0002 , INVENTOR_1 = 0x0004 ,
  INVENTOR_2_0 = 0x0008 , INVENTOR_2_1 = 0x0010 , INVENTOR_2_5 = 0x0020 , INVENTOR_2_6 = 0x0040 ,
  COIN_1_0 = 0x0080 , COIN_2_0 = 0x0100 , EXTENSION = 0x0200 , COIN_2_2 = 0x0400 ,
  COIN_2_3 = 0x0800 , COIN_2_4 = 0x1000 , INVENTOR_5_0 = 0x2000 , COIN_2_5 = 0x4000 ,
  COIN_3_0 = 0x8000 , INVENTOR_6_0 = 0x10000 , COIN_4_0 = 0x20000
}
 

Public Member Functions

 SoTextureCombine (void)
 
virtual void callback (SoCallbackAction *action)
 
virtual void doAction (SoAction *action)
 
virtual SoType getTypeId (void) const
 
virtual void GLRender (SoGLRenderAction *action)
 
virtual void pick (SoPickAction *action)
 
- Public Member Functions inherited from SoNode
virtual SoNodeaddToCopyDict (void) const
 
virtual SbBool affectsState (void) const
 
virtual void audioRender (SoAudioRenderAction *action)
 
virtual SoNodecopy (SbBool copyconnections=FALSE) const
 
virtual void copyContents (const SoFieldContainer *from, SbBool copyconnections)
 
virtual SoFieldContainercopyThroughConnection (void) const
 
virtual void getBoundingBox (SoGetBoundingBoxAction *action)
 
virtual SoChildListgetChildren (void) const
 
virtual void getMatrix (SoGetMatrixAction *action)
 
SbUniqueId getNodeId (void) const
 
NodeType getNodeType (void) const
 
virtual void getPrimitiveCount (SoGetPrimitiveCountAction *action)
 
virtual void GLRenderBelowPath (SoGLRenderAction *action)
 
virtual void GLRenderInPath (SoGLRenderAction *action)
 
virtual void GLRenderOffPath (SoGLRenderAction *action)
 
virtual void grabEventsCleanup (void)
 
virtual void grabEventsSetup (void)
 
virtual void handleEvent (SoHandleEventAction *action)
 
SbBool isOverride (void) const
 
virtual void notify (SoNotList *l)
 
virtual void rayPick (SoRayPickAction *action)
 
virtual void search (SoSearchAction *action)
 
void setNodeType (const NodeType type)
 
void setOverride (const SbBool state)
 
virtual void startNotify (void)
 
virtual void write (SoWriteAction *action)
 
virtual void writeInstance (SoOutput *out)
 
- Public Member Functions inherited from SoFieldContainer
virtual void addWriteReference (SoOutput *out, SbBool isfromfield=FALSE)
 
void copyFieldValues (const SoFieldContainer *container, SbBool copyconnections=FALSE)
 
SbBool enableNotify (const SbBool flag)
 
SbBool fieldsAreEqual (const SoFieldContainer *container) const
 
void get (SbString &fielddata)
 
void get (SbString &fielddata, SoOutput *out)
 
virtual int getAllFields (SoFieldList &l) const
 
virtual SoFieldgetEventIn (const SbName &name) const
 
virtual SoFieldgetEventOut (const SbName &name) const
 
virtual SoFieldgetField (const SbName &name) const
 
SbBool getFieldName (const SoField *const field, SbName &name) const
 
virtual int getFields (SoFieldList &l) const
 
virtual void getFieldsMemorySize (size_t &managed, size_t &unmanaged) const
 
SbBool getIsBuiltIn (void) const
 
voidgetUserData (void) const
 
SbBool hasDefaultValues (void) const
 
SbBool isNotifyEnabled (void) const
 
SbBool set (const char *const fielddata)
 
SbBool set (const char *fielddata, SoInput *input)
 
void setToDefaults (void)
 
void setUserData (void *userdata) const
 
virtual SbBool validateNewFieldValue (SoField *field, void *newval)
 
- Public Member Functions inherited from SoBase
void addAuditor (void *const auditor, const SoNotRec::Type type)
 
void assertAlive (void) const
 
const SoAuditorListgetAuditors (void) const
 
virtual SbName getName (void) const
 
int32_t getRefCount (void) const
 
SbBool isOfType (SoType type) const
 Returns TRUE if the type of this object is either of the same type or inherited from type.
 
void ref (void) const
 
void removeAuditor (void *const auditor, const SoNotRec::Type type)
 
virtual void setName (const SbName &newname)
 
SbBool shouldWrite (void)
 
void touch (void)
 
void unref (void) const
 
void unrefNoDelete (void) const
 

Static Public Member Functions

static SoType getClassTypeId (void)
 
static void initClass (void)
 Sets up initialization for data common to all instances of this class, like submitting necessary information to the Coin type system.
 
- Static Public Member Functions inherited from SoNode
static void audioRenderS (SoAction *action, SoNode *node)
 
static void callbackS (SoAction *action, SoNode *node)
 
static int getActionMethodIndex (const SoType type)
 
static void getBoundingBoxS (SoAction *action, SoNode *node)
 
static SoNodegetByName (const SbName &name)
 
static int getByName (const SbName &name, SoNodeList &l)
 
static SoType getClassTypeId (void)
 
static uint32_t getCompatibilityTypes (const SoType &nodetype)
 
static void getMatrixS (SoAction *action, SoNode *node)
 
static SbUniqueId getNextNodeId (void)
 
static void getPrimitiveCountS (SoAction *action, SoNode *node)
 
static void GLRenderS (SoAction *action, SoNode *node)
 
static void handleEventS (SoAction *action, SoNode *node)
 
static void initClass (void)
 Sets up initialization for data common to all instances of this class, like submitting necessary information to the Coin type system.
 
static void initClasses (void)
 
static void pickS (SoAction *action, SoNode *node)
 
static void rayPickS (SoAction *action, SoNode *node)
 
static void searchS (SoAction *action, SoNode *node)
 
static void writeS (SoAction *action, SoNode *node)
 
- Static Public Member Functions inherited from SoFieldContainer
static void addCopy (const SoFieldContainer *orig, const SoFieldContainer *copy)
 
static SoFieldContainercheckCopy (const SoFieldContainer *orig)
 
static void cleanupClass (void)
 
static void copyDone (void)
 
static SoFieldContainerfindCopy (const SoFieldContainer *orig, const SbBool copyconnections)
 
static SoType getClassTypeId (void)
 This static method returns the SoType object associated with objects of this class.
 
static void initClass (void)
 Sets up initialization for data common to all instances of this class, like submitting necessary information to the Coin type system.
 
static void initCopyDict (void)
 
- Static Public Member Functions inherited from SoBase
static void addName (SoBase *const base, const char *const name)
 
static SbBool connectRoute (SoInput *input, const SbName &fromnodename, const SbName &fromfieldname, const SbName &tonodename, const SbName &tofieldname)
 
static void decrementCurrentWriteCounter (void)
 
static SoType getClassTypeId (void)
 This static method returns the SoType object associated with objects of this class.
 
static SoBasegetNamedBase (const SbName &name, SoType type)
 
static int getNamedBases (const SbName &name, SoBaseList &baselist, SoType type)
 
static SbBool getTraceRefs (void)
 
static void incrementCurrentWriteCounter (void)
 
static void initClass (void)
 Sets up initialization for data common to all instances of this class, like submitting necessary information to the Coin type system.
 
static SbBool read (SoInput *input, SoBase *&base, SoType expectedtype)
 
static SbBool readRoute (SoInput *input)
 
static void removeName (SoBase *const base, const char *const name)
 
static void setInstancePrefix (const SbString &c)
 
static void setTraceRefs (SbBool trace)
 

Public Attributes

SoMFEnum alphaOperand
 
SoSFEnum alphaOperation
 
SoSFFloat alphaScale
 
SoMFEnum alphaSource
 
SoSFVec4f constantColor
 
SoMFEnum rgbOperand
 
SoSFEnum rgbOperation
 
SoSFFloat rgbScale
 
SoMFEnum rgbSource
 

Protected Member Functions

virtual ~SoTextureCombine ()
 
virtual const SoFieldDatagetFieldData (void) const
 
- Protected Member Functions inherited from SoNode
 SoNode (void)
 
virtual ~SoNode ()
 
virtual SbBool readInstance (SoInput *in, unsigned short flags)
 
- Protected Member Functions inherited from SoFieldContainer
 SoFieldContainer (void)
 
virtual ~SoFieldContainer ()
 
- Protected Member Functions inherited from SoBase
 SoBase (void)
 
virtual ~SoBase ()
 
virtual SoNotRec createNotRec (void)
 
virtual void destroy (void)
 
virtual const char * getFileFormatName (void) const
 
SbBool hasMultipleWriteRefs (void) const
 
void writeFooter (SoOutput *out) const
 
SbBool writeHeader (SoOutput *out, SbBool isgroup, SbBool isengine) const
 

Static Protected Member Functions

static const SoFieldData ** getFieldDataPtr (void)
 
- Static Protected Member Functions inherited from SoNode
static const SoFieldData ** getFieldDataPtr (void)
 
static int getNextActionMethodIndex (void)
 
static void incNextActionMethodIndex (void)
 
static void setCompatibilityTypes (const SoType &nodetype, const uint32_t bitmask)
 
static void setNextActionMethodIndex (int index)
 
- Static Protected Member Functions inherited from SoBase
static uint32_t getCurrentWriteCounter (void)
 
static void staticDataLock (void)
 
static void staticDataUnlock (void)
 

Additional Inherited Members

- Protected Types inherited from SoBase
enum  BaseFlags { IS_ENGINE = 0x01 , IS_GROUP = 0x02 }
 
- Protected Attributes inherited from SoNode
SbUniqueId uniqueId
 
- Protected Attributes inherited from SoFieldContainer
SbBool isBuiltIn
 
- Static Protected Attributes inherited from SoNode
static int nextActionMethodIndex = 0
 
static SbUniqueId nextUniqueId = 1
 

Detailed Description

The SoTextureCombine class is a node for setting texture combine functions.

This node is more or less an exact mapping of the OpenGL ARB_texture_env_combine extension (included in OpenGL in OpenGL v1.3). See http://oss.sgi.com/projects/ogl-sample/registry/ARB/texture_env_combine.txt for more information about this extension.

Basically this node lets you specify up to three sources, and a function to combine those sources. In addition to the function, it is possible to apply simple operands on the sources. In the documentation below, the sources will be called Arg0, Arg1, and Arg2, just like in the ARB_texture_env_mode specification.

It's possible to specify both a color and an alpha operation.

This node has many fields, but usually it is sufficient to set only one or very few fields. The selected operation decides which values you need to set. One common example is to add a light map to textured geometry. A light map can look like this:

Rendering of an Example LightMap

The example below just shows how to apply the light map to a cube, with one light source on each side of the cube. Usually the texture coordinates are calculated so that a spot light or a point light is simulated.

Texture2 { filename "wood.jpg" }

Switch {
  whichChild -3   # use to toggle light map on/off
  TextureUnit {
    unit 1
  }
  TextureCombine {
    rgbOperation ADD_SIGNED
    rgbSource [PREVIOUS, TEXTURE]
    rgbOperand [SRC_COLOR, SRC_COLOR ]
    alphaOperation REPLACE
    alphaSource [TEXTURE]
    alphaOperand [SRC_ALPHA]
  }
  Texture2 { filename "lightmap.jpg" }
  TextureUnit { unit 0 }
}
Cube { }

The scene above in a viewer:

Rendering of Example Scenegraph

In addition to the functions you can set in rgbOperation (or alphaOperation), it's possible to create more complex texture functions by combining two textures that have already been combined. You can use the SoSceneTexture2 node to create those textures. Below is an example that shows how to implement Arg0*Arg1

  • Arg2*Arg0, where Arg0 = texture1 RGB, Arg1 = texture2 RGB, Arg2 = texture 2 alpha:
ShapeHints { vertexOrdering COUNTERCLOCKWISE shapeType SOLID }

Separator {
  SceneTexture2 {
    size 256 256
    transparencyFunction NONE
    scene Separator {
      OrthographicCamera {
        height 2
        aspectRatio 1
        position 0 0 1
        viewportMapping LEAVE_ALONE
      }
      LightModel { model BASE_COLOR }
      Coordinate3 {
        point [ -1 -1 0, 1 -1 0, 1 1 0, -1 1 0 ] 
      }
      DEF texture1 Texture2 { filename "texture1.png" }
      TextureUnit { unit 1 }
      TextureCombine {
        rgbOperation MODULATE
        rgbSource [ PREVIOUS, TEXTURE ]
        rgbOperand [ SRC_COLOR, SRC_COLOR ]
        alphaOperation REPLACE
        alphaSource [TEXTURE]
        alphaOperand [ SRC_ALPHA ]
      }
      DEF texture2 Texture2 { filename "texture2_with_alpha.png" }
      TextureCoordinate2 {
        point [0 0, 1 0, 1 1, 0 1]
      }
      FaceSet { numVertices 4 }
    }
  }
  TextureUnit { unit 1 }
  TextureCombine {
    rgbOperation ADD
    rgbSource [ PREVIOUS, TEXTURE ]
    rgbOperand [ SRC_COLOR, SRC_COLOR ]
    alphaOperation REPLACE
    alphaSource [TEXTURE]
    alphaOperand [ SRC_ALPHA ]
  }
  SceneTexture2 {
    size 256 256
    transparencyFunction NONE
    scene Separator {
      OrthographicCamera {
        height 2
        aspectRatio 1
        position 0 0 1
        viewportMapping LEAVE_ALONE
      }
      LightModel { model BASE_COLOR }
      Coordinate3 {
        point [ -1 -1 0, 1 -1 0, 1 1 0, -1 1 0 ] 
      }
      USE texture1
      TextureUnit { unit 1 }
      TextureCombine {
        rgbOperation MODULATE
        rgbSource [ PREVIOUS, TEXTURE ]
        rgbOperand [ SRC_COLOR, SRC_ALPHA ]
        alphaOperation REPLACE
        alphaSource [TEXTURE]
        alphaOperand [ SRC_ALPHA ]
      }
      USE texture2
      TextureCoordinate2 {
        point [0 0, 1 0, 1 1, 0 1]
      }
      FaceSet { numVertices 4 }
    }
  }
  # map resulting texture onto a Cube
  Cube { }
}

It should be possible to create almost any kind of texture function using this scheme, at the cost of extra texture memory usage (the intermediate textures), of course.

FILE FORMAT/DEFAULTS:

rgbSource [ ]
alphaSource [ ]
rgbOperand [ ]
alphaOperand [ ]
rgbOperation MODULATE
alphaOperation MODULATE
rgbScale 1
alphaScale 1
constantColor 1 1 1 1
}
The SbList class is a template container class for lists.
Definition SbList.h:70
@ MODULATE
Definition SoTextureCombine.h:66
Since
Coin 2.3

Member Enumeration Documentation

◆ Operand

For enumerating source operands.

Enumerator
SRC_COLOR 

Use the source color as operand.

ONE_MINUS_SRC_COLOR 

Use one minus source color as operand.

SRC_ALPHA 

Use the source alpha as operand.

ONE_MINUS_SRC_ALPHA 

Use one minus source alpha as operand.

◆ Operation

For enumerating combiner operations/functions.

Enumerator
REPLACE 

dst = Arg0

MODULATE 

dst = Arg0 * Arg1

ADD 

dst = Arg0 + Arg1

ADD_SIGNED 

dst = Arg0 + Arg1 - 0.5

SUBTRACT 

dst = Arg0 - Arg1

INTERPOLATE 

dst = Arg0 * (Arg2) + Arg1 * (1-Arg2)

DOT3_RGB 

Dot product of Arg0 and Arg1

DOT3_RGBA 

Dot product (including alpha) of Arg0 and Arg1

◆ Source

For enumerating combiner sources.

Enumerator
PRIMARY_COLOR 

Choose primary color as source.

TEXTURE 

Choose texture as source.

CONSTANT 

Choose the constantColor field as source.

PREVIOUS 

Choose the previous unit's texture as source.

Constructor & Destructor Documentation

◆ SoTextureCombine()

SoTextureCombine::SoTextureCombine ( void )

Constructor.

◆ ~SoTextureCombine()

SoTextureCombine::~SoTextureCombine ( )
protectedvirtual

Destructor.

Member Function Documentation

◆ callback()

void SoTextureCombine::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.

◆ doAction()

void SoTextureCombine::doAction ( SoAction * action)
virtual

This function performs the typical operation of a node for any action.

Reimplemented from SoNode.

◆ getClassTypeId()

SoType SoTextureCombine::getClassTypeId ( void )
static

SoTextureCombine::rgbSource

The color sources. This field is empty by default, but you can insert up to three values [Arg0, Arg1, Arg2]. When the field contains less than three values, the default [TEXTURE, PREVIOUS, CONSTANT], will be used for missing values.

For texture unit 0, PREVIOUS maps to PRIMARY_COLOR,

SoTextureCombine::alphaSource

The alpha sources. This field is empty by default, but you can insert up to three values [Arg0, Arg1, Arg2]. When the field contains less than three values, the default [TEXTURE, PREVIOUS, CONSTANT], will be used for missing values.

For texture unit 0, PREVIOUS maps to PRIMARY_COLOR,

SoTextureCombine::rgbOperand

The color operands. This field is empty by default, but you can insert up to three values. When the field contains less than three values, the default [SRC_COLOR, SRC_COLOR, SRC_COLOR] will be used for missing values.

SoTextureCombine::alphaOperand

The alpha operands. This field is empty by default, but you can insert up to three values. When the field contains less than three values, the default [SRC_ALPHA, SRC_ALPHA, SRC_ALPHA] will be used for missing values. Please not that only SRC_ALPHA and ONE_MINUS_SRC_ALPHA are valid operands for alpha operations.

SoTextureCombine::rgbOperation

The color operation. Default value is MODULATE.

SoTextureCombine::alphaOperation

The alpha operation. Default value is MODULATE.

SoTextureCombine::rgbScale

Scale color result by this value. Supported values are 1, 2, and 4.

SoTextureCombine::alphaScale

Scale alpha result by this value. Supported values are 1, 2, and 4.

SoTextureCombine::constantColor

The constant color (when CONSTANT is used as source). Default value is (1,1,1,1).

This static method returns the SoType object associated with objects of this class.

◆ getFieldData()

const SoFieldData * SoTextureCombine::getFieldData ( void ) const
protectedvirtual

Returns a pointer to the class-wide field data storage object for this instance. If no fields are present, returns NULL.

Reimplemented from SoFieldContainer.

◆ getFieldDataPtr()

const SoFieldData ** SoTextureCombine::getFieldDataPtr ( void )
staticprotected

This API member is considered internal to the library, as it is not likely to be of interest to the application programmer.

Returns the SoFieldData class which holds information about fields in this node.

◆ getTypeId()

SoType SoTextureCombine::getTypeId ( void ) const
virtual

Returns the type identification of an object derived from a class inheriting SoBase. This is used for runtime type checking and "downward" casting.

Implements SoBase.

◆ GLRender()

void SoTextureCombine::GLRender ( SoGLRenderAction * action)
virtual

Action method for the SoGLRenderAction.

This is called during rendering traversals. Nodes influencing the rendering state in any way or want to throw geometry primitives at OpenGL override this method.

Reimplemented from SoNode.

◆ pick()

void SoTextureCombine::pick ( SoPickAction * action)
virtual

Action method for SoPickAction.

Does common processing for SoPickAction action instances.

Reimplemented from SoNode.


The documentation for this class was generated from the following files: