Open Inventor Release 2024.1.0
 
Loading...
Searching...
No Matches
SoIndexedTexture2 Class Reference

VSG extension Class for 2D indexed texture. More...

#include <Inventor/nodes/SoIndexedTexture2.h>

+ Inheritance diagram for SoIndexedTexture2:

Public Member Functions

virtual SoType getTypeId () const
 Returns the type identifier for this specific instance.
 
void computeDataRange ()
 Compute the min and max value of the indexed image and put the result in minValue and maxValue.
 
 SoIndexedTexture2 ()
 Constructor.
 
- Public Member Functions inherited from SoTexture
void setBitmapFileType (FileType in_type)
 Sets the texture file format.
 
FileType getBitmapFileType (void)
 Gets the texture file format.
 
virtual void setOverride (const SbBool state)
 Set the state of the override field.
 
virtual SbBool isOverride () const
 Returns the state of the override field.
 
- Public Member Functions inherited from SoNode
virtual SoNodecopy (SbBool copyConnections=FALSE) const
 Creates and returns an exact copy of the node.
 
virtual SbBool affectsState () const
 Returns TRUE if a node has an effect on the state during traversal.
 
virtual void touch ()
 Marks an instance as modified, simulating a change to it.
 
- Public Member Functions inherited from SoFieldContainer
void setToDefaults ()
 Sets all fields in this object to their default values.
 
SbBool hasDefaultValues () const
 Returns TRUE if all of the object's fields have their default values.
 
SbBool fieldsAreEqual (const SoFieldContainer *fc) const
 Returns TRUE if this object's fields are exactly equal to fc's fields.
 
void copyFieldValues (const SoFieldContainer *fc, SbBool copyConnections=FALSE)
 Copies the contents of fc's fields into this object's fields.
 
SoNONUNICODE SbBool set (const char *fieldDataString)
 Sets one or more fields in this object to the values specified in the given string, which should be a string in the Open Inventor file format.
 
SbBool set (const SbString &fieldDataString)
 Sets one or more fields in this object to the values specified in the given string, which should be a string in the Open Inventor file format.
 
void get (SbString &fieldDataString)
 Returns the values of the fields of this object in the Open Inventor ASCII file format in the given string.
 
virtual int getFields (SoFieldList &list) const
 Appends references to all of this object's fields to resultList, and returns the number of fields appended.
 
virtual int getAllFields (SoFieldList &list) const
 Returns a list of fields, including the eventIn's and eventOut's.
 
virtual SoFieldgetField (const SbName &fieldName) const
 Returns a the field of this object whose name is fieldName.
 
virtual SoFieldgetEventIn (const SbName &fieldName) const
 Returns a the eventIn with the given name.
 
virtual SoFieldgetEventOut (const SbName &fieldName) const
 Returns the eventOut with the given name.
 
SbBool getFieldName (const SoField *field, SbName &fieldName) const
 Returns the name of the given field in the fieldName argument.
 
SbBool enableNotify (SbBool flag)
 Notification at this Field Container is enabled (if flag == TRUE) or disabled (if flag == FALSE).
 
SbBool isNotifyEnabled () const
 Notification is the process of telling interested objects that this object has changed.
 
virtual void setUserData (void *data)
 Sets application data.
 
void * getUserData (void) const
 Gets user application data.
 
- Public Member Functions inherited from SoBase
virtual SbName getName () const
 Returns the name of an instance.
 
virtual void setName (const SbName &name)
 Sets the name of an instance.
 
void setSynchronizable (const bool b)
 Sets this to be a ScaleViz synchronizable object.
 
bool isSynchronizable () const
 Gets the ScaleViz synchronizable state of this object.
 
- Public Member Functions inherited from SoRefCounter
void ref () const
 Adds a reference to an instance.
 
void unref () const
 Removes a reference from an instance.
 
void unrefNoDelete () const
 unrefNoDelete() should be called when it is desired to decrement the reference count, but not delete the instance if this brings the reference count to zero.
 
int getRefCount () const
 Returns current reference count.
 
void lock () const
 lock this instance.
 
void unlock () const
 unlock this instance.
 
- Public Member Functions inherited from SoTypedObject
SbBool isOfType (const SoType &type) const
 Returns TRUE if this object is of the type specified in type or is derived from that type.
 
template<typename TypedObjectClass >
SbBool isOfType () const
 Returns TRUE if this object is of the type of class TypedObjectClass or is derived from that class.
 

Static Public Member Functions

static SoType getClassTypeId ()
 Returns the type identifier for this class.
 
- Static Public Member Functions inherited from SoTexture
static SoType getClassTypeId ()
 Returns the type identifier for this class.
 
static SbBool isSupported (HW_Feature feature)
 Returns information about hardware support for various texture features.
 
static SbRasterImagereadTexture (const SbString &filename, FileType filetype=UNKNOWN)
 Convenience function that loads the image data from any texture file supported by Open Inventor and returns an SbRasterImage object.
 
- Static Public Member Functions inherited from SoNode
static SoType getClassTypeId ()
 Returns the type identifier for this class.
 
static SoNodegetByName (const SbName &name)
 A node's name can be set using SoBase::setName().
 
static int getByName (const SbName &name, SoNodeList &list)
 A node's name can be set using SoBase::setName().
 
- Static Public Member Functions inherited from SoFieldContainer
static SoType getClassTypeId ()
 Returns the type of this class.
 
- Static Public Member Functions inherited from SoBase
static SoType getClassTypeId ()
 Returns type identifier for this class.
 
- Static Public Member Functions inherited from SoTypedObject
static SoType getClassTypeId ()
 Returns the type identifier for this class.
 

Public Attributes

SoSFFloat minValue
 Specifies the range of values which is mapped onto the color map (see SoColorMap).
 
SoSFFloat maxValue
 See minValue.
 
SoSFArray2D imageIndex
 This field contains the in-memory representation of the indexed texture image.
 
SoSFBool rescaleTexCoord
 This field controls the way an image with non-power-of-two dimension is handled:
 
SoSFEnum wrapT
 Indicates what to do when texture coordinates in the T (vertical) direction lie outside the range 0-1.
 
- Public Attributes inherited from SoTexture
SoSFEnum internalFormat
 Internal format for texture storage.
 
SoSFBool enableCompressedTexture
 Enables storage of textures on the graphics board in compressed form.
 
SoSFEnum wrapS
 Indicates what to do when texture coordinates in the S (horizontal) direction lie outside the range 0-1.
 
SoSFEnum model
 Specifies how to map texture onto surface.
 
SoSFColor blendColor
 Color used for BLEND model.
 
SoSFBool enableBorder
 Enables borders for textures.
 
SoSFVec4f borderColor
 Defines border color used for border texture filtering.
 
SoSFFloat maxAnisotropy
 Specifies on a per-texture object basis, the maximum degree of anisotropy to account for in texture filtering.
 
SoSFEnum minFilter
 Specifies the OpenGL minFilter.
 
SoSFEnum magFilter
 Specifies the OpenGL magFilter.
 

Additional Inherited Members

- Public Types inherited from SoTexture
enum  InternalFormat {
  AUTO_INTERNAL_FORMAT ,
  ALPHA_FORMAT ,
  ALPHA4 ,
  ALPHA8 ,
  ALPHA12 ,
  ALPHA16 ,
  LUMINANCE_FORMAT ,
  LUMINANCE4 ,
  LUMINANCE8 ,
  LUMINANCE12 ,
  LUMINANCE16 ,
  LUMINANCE_ALPHA ,
  LUMINANCE4_ALPHA4 ,
  LUMINANCE6_ALPHA2 ,
  LUMINANCE8_ALPHA8 ,
  LUMINANCE12_ALPHA4 ,
  LUMINANCE12_ALPHA12 ,
  LUMINANCE16_ALPHA16 ,
  INTENSITY_FORMAT ,
  INTENSITY4 ,
  INTENSITY8 ,
  INTENSITY12 ,
  INTENSITY16 ,
  R3_G3_B2 ,
  RGB_FORMAT ,
  RGB4 ,
  RGB5 ,
  RG8 ,
  RGB8 ,
  RGB10 ,
  RGB12 ,
  RGB16 ,
  RGBA_FORMAT ,
  RGBA2 ,
  RGBA4 ,
  RGB5_ALPHA1 ,
  RGBA8 ,
  RGB10_ALPHA2 ,
  RGBA12 ,
  RGBA16 ,
  RGBA_FLOAT32 ,
  RGB_FLOAT32 ,
  ALPHA_FLOAT32 ,
  INTENSITY_FLOAT32 ,
  LUMINANCE_FLOAT32 ,
  LUMINANCE_ALPHA_FLOAT32 ,
  RGBA_FLOAT16 ,
  RGB_FLOAT16 ,
  ALPHA_FLOAT16 ,
  INTENSITY_FLOAT16 ,
  LUMINANCE_FLOAT16 ,
  LUMINANCE_ALPHA_FLOAT16 ,
  COMPRESSED_ALPHA ,
  COMPRESSED_LUMINANCE ,
  COMPRESSED_LUMINANCE_ALPHA ,
  COMPRESSED_INTENSITY ,
  COMPRESSED_RGB ,
  COMPRESSED_RGBA ,
  COMPRESSED_LUMINANCE_LATC1 ,
  COMPRESSED_SIGNED_LUMINANCE_LATC1 ,
  COMPRESSED_LUMINANCE_ALPHA_LATC2 ,
  COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2 ,
  COMPRESSED_RED_RGTC1 ,
  COMPRESSED_SIGNED_RED_RGTC1 ,
  COMPRESSED_RED_GREEN_RGTC2 ,
  COMPRESSED_SIGNED_RED_GREEN_RGTC2 ,
  DEPTH_COMPONENT16 ,
  DEPTH_COMPONENT24 ,
  DEPTH24_STENCIL8 ,
  R8I ,
  R8UI ,
  R16I ,
  R16UI ,
  R32I ,
  R32UI ,
  RG8I ,
  RG8UI ,
  RG16I ,
  RG16UI ,
  RG32I ,
  RG32UI ,
  RGB8I ,
  RGB8UI ,
  RGB16I ,
  RGB16UI ,
  RGB32I ,
  RGB32UI ,
  RGBA8I ,
  RGBA8UI ,
  RGBA16I ,
  RGBA16UI ,
  RGBA32I ,
  RGBA32UI
}
 Texture internal storage format. More...
 
enum  Model {
  MODULATE = SbEnums::TEX_MODEL_MODULATE ,
  DECAL = SbEnums::TEX_MODEL_DECAL ,
  BLEND = SbEnums::TEX_MODEL_BLEND ,
  REPLACE = SbEnums::TEX_MODEL_REPLACE ,
  ADD = SbEnums::TEX_MODEL_ADD ,
  COMBINE = SbEnums::TEX_MODEL_COMBINE
}
 Texture Combiner Functions. More...
 
enum  Wrap {
  REPEAT = SbEnums::TEX_ADDRESS_REPEAT ,
  CLAMP = SbEnums::TEX_ADDRESS_CLAMP ,
  CLAMP_TO_BORDER = SbEnums::TEX_ADDRESS_CLAMP_BORDER ,
  CLAMP_TO_EDGE = SbEnums::TEX_ADDRESS_CLAMP_TO_EDGE ,
  MIRRORED_REPEAT = SbEnums::TEX_ADDRESS_MIRROR_REPEAT
}
 Texture wrap type. More...
 
enum  Filter {
  AUTO = SbEnums::TEX_FILTER_AUTO ,
  NEAREST = SbEnums::TEX_FILTER_NEAREST ,
  LINEAR = SbEnums::TEX_FILTER_LINEAR ,
  NEAREST_MIPMAP_NEAREST = SbEnums::TEX_FILTER_NEAREST_MIPMAP_NEAREST ,
  NEAREST_MIPMAP_LINEAR = SbEnums::TEX_FILTER_NEAREST_MIPMAP_LINEAR ,
  LINEAR_MIPMAP_NEAREST = SbEnums::TEX_FILTER_LINEAR_MIPMAP_NEAREST ,
  LINEAR_MIPMAP_LINEAR = SbEnums::TEX_FILTER_LINEAR_MIPMAP_LINEAR
}
 Specifies the OpenGL filtering method for minification and magnification. More...
 
enum  HW_Feature {
  HW_NPOT = 0 ,
  HW_FLOATFORMAT ,
  HW_DEPTHFORMAT ,
  HW_AUTOMIPMAP ,
  HW_BORDER_CLAMP ,
  HW_EDGE_CLAMP ,
  HW_MIRRORED_REPEAT ,
  HW_COMPRESSION_S3TC ,
  HW_COMPRESSION_LATC ,
  HW_COMPRESSION_RGTC
}
 
enum  FileType {
  UNKNOWN ,
  RGB ,
  SGI ,
  TIFF ,
  GIF ,
  JPEG ,
  BMP ,
  PNG ,
  JPEG2000 ,
  PGX ,
  PNM ,
  RAS ,
  DDS ,
  HDRI ,
  NUM_FILETYPES
}
 File Type possible values. More...
 

Detailed Description

VSG extension Class for 2D indexed texture.

This property node defines an "indexed" texture image. In a standard texture image, e.g. SoTexture2, each texel contains a color value that is directly applied to the geometry. In this node each texel contains a data value that is mapped to a color value using the color map defined by the current SoColorMap node.

This image is stored in the current texture unit (see SoTextureUnit) and the texture is applied to subsequent shapes as they are rendered.

The image data is stored in an SoSFArray2D. This array can contain different types of data (UNSIGNED_BYTE, UNSIGNED_SHORT, UNSIGNED_INT32, SIGNED_BYTE, SIGNED_SHORT, SIGNED_INT32, FLOAT).

When Open Inventor creates the OpenGL texture image from the data array, the data values must be scaled into the range of values of the texture (0-255 for an 8-bit indexed texture). The minValue and maxValue fields specify the range of data values that will be scaled into the range of texture values. For example, if minValue is set to 10000 and maxValue to 38000, all values less than or equal to 10000 will be mapped to the entry 0 of the color map and all values greater than or equal to 38000 to the last entry. The image below illustrates the process of mapping and shows how it can be used to map only the used data range to the color map:

br

If minValue or maxValue change, then the OpenGL texture must be recreated. If the texture is large, this may be time consuming. Generally it's more efficient to modify the SoColorMap node because the OpenGL texture corresponding to the data does not need to be recreated – only the texture containing the colormap, which is normally quite small.

NOTE: Texture data values are stored with 12 bits of precision instead of the usual 8 bits, when:

  • ARB_fragment_program is supported by the graphics card.
  • The number of color map entries is greater than 256.
  • The texture data type has more than 8 bits of precision (i.e., not UNSIGNED_BYTE or SIGNED_BYTE).

EXAMPLE

EXAMPLE

    On graphics cards supporting ARB_fragment_program , the model field will be ignored and multitexturing will not work. It is possible to circumvent this limitation by using a custom shader. The following GLSL code shows how to do multitexturing between two indexed textures sharing the same color map:

    // Fragment shader
    uniform sampler2D colormap;
    uniform sampler2D indexedTex1;
    uniform sampler2D indexedTex2;
    void main()
    {
    // Fetch first value and its assigned color
    float value1 = texture(indexedTex1, gl_TexCoord[0].xy).x;
    vec4 color1 = texture(colormap, vec2(value1, 0));
    // Fetch second and its assigned color
    float value2 = texture(indexedTex2, gl_TexCoord[0].xy).x;
    vec4 color2 = texture(colormap, vec2(value2, 0));
    // Combine the colors
    gl_FragColor = color1 * color2 * gl_Color;
    }

    The scene graph would be initialized like this:

    SoColorMap* colorMap = new SoColorMap();
    . . .
    SoIndexedTexture2* indexedTex1 = new SoIndexedTexture2();
    . . .
    SoIndexedTexture2* indexedTex2 = new SoIndexedTexture2();
    . . .
    SoFragmentShader* fragShader = new SoFragmentShader();
    fragShader->sourceProgram = "filename.glsl";
    fragShader->addShaderParameter1i( "colorMap" , 0 );
    fragShader->addShaderParameter1i( "indexedTex1", 1 );
    fragShader->addShaderParameter1i( "indexedTex2", 2 );
    SoShaderProgram* shaderProgram = new SoShaderProgram();
    shaderProgram->shaderObject = fragShader;
    SoTextureUnit* textureUnit = new SoTextureUnit();
    textureUnit->unit = 2; //Texture unit for the second indexed texture
    root->addChild(colorMap); //Color map must come first (texture unit 1)
    root->addChild(indexedTex1); //First indexed texture (texture unit 0)
    root->addChild(textureUnit);
    root->addChild(indexedTex2); //Second indexed texture (texture unit 2)
    root->addChild(shaderProgram);
    root->addChild(geometry);
    <a href="IconLegend.html"><img src="extTGS.gif" alt="VSG extension" border="0"></a> Node that define...
    <a href="IconLegend.html"><img src="extTGS.gif" alt="VSG extension" border="0"></a> Shader program p...
    SoMFNode shaderObject
    Specifies the list of shader objects (i.e., vertex shaders, geometry and fragment shaders) which form...
    <a href="IconLegend.html"><img src="extTGS.gif" alt="VSG extension" border="0"></a> Node that specif...
    SoSFUInt32 unit
    Specifies the texture unit identifier.

FILE FORMAT/DEFAULT

    IndexedTexture2 {
    minValue 0
    maxValue 0
    imageIndex 0 0
    rescaleTexCoord FALSE
    wrapS REPEAT
    wrapT REPEAT
    model MODULATE
    blendColor 0 0 0
    enableBorder FALSE
    borderColor 0 0 0 0
    maxAnisotropy 1.0
    minFilter AUTO
    magFilter AUTO
    useAutoMipmap FALSE
    internalFormat AUTO_INTERNAL_FORMAT
    }

ACTION BEHAVIOR

SEE ALSO

SoTexture2Transform, SoTextureCoordinate2,
SoTextureCoordinateFunction, SoColorMap, SoSFArray2D.

Definition at line 317 of file SoIndexedTexture2.h.

Constructor & Destructor Documentation

◆ SoIndexedTexture2()

SoIndexedTexture2::SoIndexedTexture2 ( )

Constructor.

Member Function Documentation

◆ computeDataRange()

void SoIndexedTexture2::computeDataRange ( )

Compute the min and max value of the indexed image and put the result in minValue and maxValue.

◆ getClassTypeId()

static SoType SoIndexedTexture2::getClassTypeId ( )
static

Returns the type identifier for this class.


◆ getTypeId()

virtual SoType SoIndexedTexture2::getTypeId ( ) const
virtual

Returns the type identifier for this specific instance.

Reimplemented from SoTexture.

Member Data Documentation

◆ imageIndex

SoSFArray2D SoIndexedTexture2::imageIndex

This field contains the in-memory representation of the indexed texture image.

Each value of this array is a color index. In the case of float values, data must be between 0 and 1.

Definition at line 350 of file SoIndexedTexture2.h.

◆ maxValue

SoSFFloat SoIndexedTexture2::maxValue

See minValue.

Definition at line 343 of file SoIndexedTexture2.h.

◆ minValue

SoSFFloat SoIndexedTexture2::minValue

Specifies the range of values which is mapped onto the color map (see SoColorMap).

When minValue and maxValue are equal to 0 (the default), the entire range of the data type is mapped onto the color map, except in the case of float data. For example, for a color map of size N:

  • With unsigned byte values, [0-255] is mapped onto the color map [0 - N-1]
  • With unsigned short values, [0-65535] is mapped onto the color map [0 - N-1]
  • With signed short values, [-32768 - 32767] is mapped onto the color map [0 - N-1].
  • With float data type, [0-1] is mapped onto the color map [0 - N-1]

All values less than or equal to minValue will be mapped to the first entry of the color map. Likewise, all values greater than or equal to maxValue will be mapped to the last entry of the color map.

Definition at line 338 of file SoIndexedTexture2.h.

◆ rescaleTexCoord

SoSFBool SoIndexedTexture2::rescaleTexCoord

This field controls the way an image with non-power-of-two dimension is handled:

  • If the graphics card supports GL_ARB_texture_non_power_of_two , this field is ignored and the image is sent directly to OpenGL.
  • If rescaleTexCoord is FALSE (the default), the image is rescaled to the next lower power-of-two dimensions. The scaling is done with a box filter.
  • If rescaleTexCoord is TRUE, the image is not rescaled but is only copied into a texture with the next higher power-of-two dimension, and its texture coordinates are scaled by applying a texture transform in order to only display the actual image.

Default is FALSE.

When this field is enabled, if other texture transforms are applied to the texture coordinates (especially if the texture is repeated), the unused part of the larger texture could be displayed. Furthermore, in this mode, if non-power-of-two textures occur one after another in the scene graph, an incorrect image may result because texture transforms are cumulative. For example, the following code would give incorrect results:

root->addChild( colorMap );
root->addChild( nonPowerOfTwoIndexedTexture1 );
root->addChild( nonPowerOfTwoIndexedTexture2 );
root->addChild( nonPowerOfTwoIndexedTexture3 );

The correct way is to use a separator above each texture, as shown:

root->addChild( colorMap );
root->addChild( separator1 );
separator1->addChild( nonPowerOfTwoIndexedTexture1 );
root->addChild( separator2);
separator2->addChild( nonPowerOfTwoIndexedTexture2 );
root->addChild( separator3);
separator3->addChild( nonPowerOfTwoIndexedTexture3 );

Definition at line 439 of file SoIndexedTexture2.h.

◆ wrapT

SoSFEnum SoIndexedTexture2::wrapT

Indicates what to do when texture coordinates in the T (vertical) direction lie outside the range 0-1.

Use enum SoTexture::Wrap. Default is REPEAT.

Definition at line 446 of file SoIndexedTexture2.h.


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