- All Implemented Interfaces:
public class SoTexture3 extends SoTexture3D texture mapping node. This property node defines a 3D texture map and parameters for that map. This map is used to apply a 3D texture to subsequent shapes as they are rendered.
The texture can be read from the file(s) specified by the
filenamesfield. Once the texture has been read, the
imagesfield contains the texture data. However, this field is marked so the image is not written out when the texture node is written to a file. To turn off texturing, set the first value of the
filenamesfield to an empty string ("").
Simply put, a 3D texture is a set of well-arranged 2D textures. Typically, 3D textures represent a set of image-slices of a given volume of data, and are used for mapping onto pieces of geometry. Note that this is different from direct volume rendering in that 3D textures need to be mapped onto a piece of geometry.
OpenGL requires all images in a 3D texture to have the same dimensions, and each dimension (X, Y, and Z) needs to be a power of 2. Also, images must have the same number of components (grayscale, grayscale with transparency, RGB, or RGB with transparency).
- Images that do not have the same number of components as the first image are recomputed to have the same number of components. At best, there is no loss of quality. At worst, the recomputed images may lose colors and/or transparency.
- If the 2D texture image's width or height is greater than the maximum supported by OpenGL, then the image will be clipped at the maximum texture size.
- If one or more of the dimensions is not a power of 2, the texture is enlarged (it is never shrunk) to fit the power-of-2 requirement. Note that, unlike 2D textures where a resized texture is actually rescaled, the 3D image is not rescaled. Instead, black pixels are added to the edge of the image.
You should take this into account when setting texture coordinates. If your 3D image is not correctly dimensioned, you may want to consider either applying a ratio to your coordinates or adding an
SoTexture3Transformnode with the field scaleFactor set to compensate.
- Images that have a different size from the first image are resized (clipped or augmented) to match the size of the first image (which itself may have been resized to satisfy the size requirements of OpenGL).
- If the number of images (the depth of the 3D texture) is not a power of 2, an error is issued and the nearest power of 2 is chosen. If it is lower, some images are discarded; if it is higher, new images are created and filled with zeros.
The quality of the texturing is affected by the textureQuality field of the
SoComplexitynode. The textureQuality field affects what kind of filtering is done to the texture when it must be minified or magnified. The mapping of a particular texture quality value to a particular OpenGL filtering technique is implementation dependent, and varies based on the texturing performance. If mipmap filtering is required, mipmaps are automatically created using the simple box filter.
Transparency Texture images can contain transparency (alpha values less than 1) and modify the transparency of geometry in the scene. Also note that some image file formats, for example JPEG, do not support transparency information (alpha channel).
3D textures are only supported by the following shapes:
SoIndexedFaceSetshapes automatically compute texture coordinates if they are not specified either by a texture coordinate function (see
SoTextureCoordinateFunction) or by explicit texture coordinates (see
filenames "" enableCompressedTexture false images 0 0 0 0 wrapS REPEAT wrapT REPEAT wrapR REPEAT model MODULATE blendColor 0 0 0 enableBorder false borderColor 0 0 0 1 maxAnisotropy 1.0 minFilter AUTO magFilter AUTO useAutoMipmap false internalFormat AUTO_INTERNAL_FORMAT layout VOLUME
Nested Class Summary
Nested Classes Modifier and Type Class Description
Nested classes/interfaces inherited from class com.openinventor.inventor.nodes.SoTexture
SoTexture.FileTypes, SoTexture.Filters, SoTexture.HW_Features, SoTexture.InternalFormats, SoTexture.Models, SoTexture.WrapType
Nested classes/interfaces inherited from class com.openinventor.inventor.nodes.SoNode
Fields Modifier and Type Field Description
filenamesNames of file(s) from which to read texture image(s).
imagesContains an in-memory representation of the texture map.
layoutIndicates whether the data layout is a volumetric texture VOLUME or an array of bi-dimensional textures ARRAY.
wrapRIndicates what to do when texture coordinates in the R (depth) direction lie outside the range 0-1.
wrapTIndicates what to do when texture coordinates in the T (vertical) direction lie outside the range 0-1.
Fields inherited from class com.openinventor.inventor.nodes.SoTexture
blendColor, borderColor, enableBorder, enableCompressedTexture, internalFormat, magFilter, maxAnisotropy, minFilter, model, wrapS
Constructors Constructor Description
SoTexture3()Creates a texture node with default settings.
Methods inherited from class com.openinventor.inventor.nodes.SoTexture
getBitmapFileType, isSupported, readTexture, readTexture, setBitmapFileType
Methods inherited from class com.openinventor.inventor.nodes.SoNode
affectsState, callback, copy, copy, distribute, doAction, getAlternateRep, getBoundingBox, getByName, getMatrix, getPrimitiveCount, getRenderEngineMode, getRenderUnitID, GLRender, GLRenderBelowPath, GLRenderInPath, GLRenderOffPath, grabEventsCleanup, grabEventsSetup, handleEvent, isBoundingBoxIgnoring, isOverride, pick, rayPick, search, setOverride, touch, write
Methods inherited from class com.openinventor.inventor.fields.SoFieldContainer
copyFieldValues, copyFieldValues, enableNotify, fieldsAreEqual, get, getAllFields, getEventIn, getEventOut, getField, getFieldName, hasDefaultValues, isNotifyEnabled, set, setToDefaults
Methods inherited from class com.openinventor.inventor.misc.SoBase
dispose, getName, isDisposable, isSynchronizable, setName, setSynchronizable
public final SoMFFilePathString filenamesNames of file(s) from which to read texture image(s).
The standard image file formats are supported. See
SoRasterImageRWfor the list. If the filename is not an absolute path name, the list of directories maintained by
SoInputis searched. If the texture is not found in any of those directories, then the file is searched for relative to the directory from which the
SoTexture3node was read. For example, if an
SoTexture3node with a filename of "../tofu.rgb" is read from /usr/people/bob/models/food.iv, then /usr/people/bob/tofu.rgb will be read (assuming tofu.rgb isn't found in the directories maintained by
All images must have the same dimensions and number of components. Depth (number of slices) is determined by the number of file names.
Note that only 2D image file formats are currently supported. A 3D texture image can be read as a series of 2D image files.
public final SoSFImage3 images
public final SoSFEnum<SoTexture.WrapType> wrapTIndicates what to do when texture coordinates in the T (vertical) direction lie outside the range 0-1. . Default is REPEAT.
public final SoSFEnum<SoTexture.WrapType> wrapRIndicates what to do when texture coordinates in the R (depth) direction lie outside the range 0-1. . Default is REPEAT.
public final SoSFEnum<SoTexture3.Layouts> layoutIndicates whether the data layout is a volumetric texture VOLUME or an array of bi-dimensional textures ARRAY. . Default is VOLUME.
Note that if you use a
SoShaderProgram, the layout value affects the type of sampler in GLSL: if the layout value is VOLUME, the sampler type is sampler3D; if the layout value is ARRAY, the sampler type is sampler2DArray.
- Open Inventor 9.6