1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152
|
/*=========================================================================
Program: Visualization Toolkit
Module: $RCSfile: vtkTexture.h,v $
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
// .NAME vtkTexture - handles properties associated with a texture map
// .SECTION Description
// vtkTexture is an object that handles loading and binding of texture
// maps. It obtains its data from an input image data dataset type.
// Thus you can create visualization pipelines to read, process, and
// construct textures. Note that textures will only work if texture
// coordinates are also defined, and if the rendering system supports
// texture.
//
// Instances of vtkTexture are associated with actors via the actor's
// SetTexture() method. Actors can share texture maps (this is encouraged
// to save memory resources.)
// .SECTION Caveats
// Currently only 2D texture maps are supported, even though the data pipeline
// supports 1,2, and 3D texture coordinates.
//
// Some renderers such as OpenGL require that the texture map dimensions are
// a power of two in each direction. Other renderers may have similar
// (ridiculous) restrictions, so be careful out there... (Note: a recent change
// to vtk allows use of non-power of two texture maps in OpenGL. The texture is
// automatically resampled to a power of two in one or more directions.)
// .SECTION See Also
// vtkActor vtkRenderer vtkOpenGLTexture
#ifndef __vtkTexture_h
#define __vtkTexture_h
#include "vtkImageAlgorithm.h"
class vtkImageData;
class vtkLookupTable;
class vtkRenderer;
class vtkUnsignedCharArray;
class vtkWindow;
class vtkDataArray;
#define VTK_TEXTURE_QUALITY_DEFAULT 0
#define VTK_TEXTURE_QUALITY_16BIT 16
#define VTK_TEXTURE_QUALITY_32BIT 32
class VTK_RENDERING_EXPORT vtkTexture : public vtkImageAlgorithm
{
public:
static vtkTexture *New();
vtkTypeRevisionMacro(vtkTexture,vtkImageAlgorithm);
void PrintSelf(ostream& os, vtkIndent indent);
// Description:
// Renders a texture map. It first checks the object's modified time
// to make sure the texture maps Input is valid, then it invokes the
// Load() method.
virtual void Render(vtkRenderer *ren);
// Description:
// Release any graphics resources that are being consumed by this texture.
// The parameter window could be used to determine which graphic
// resources to release.
virtual void ReleaseGraphicsResources(vtkWindow *) {};
// Description:
// Abstract interface to renderer. Each concrete subclass of
// vtkTexture will load its data into graphics system in response
// to this method invocation.
virtual void Load(vtkRenderer *) {};
// Description:
// Turn on/off the repetition of the texture map when the texture
// coords extend beyond the [0,1] range.
vtkGetMacro(Repeat,int);
vtkSetMacro(Repeat,int);
vtkBooleanMacro(Repeat,int);
// Description:
// Turn on/off linear interpolation of the texture map when rendering.
vtkGetMacro(Interpolate,int);
vtkSetMacro(Interpolate,int);
vtkBooleanMacro(Interpolate,int);
// Description:
// Force texture quality to 16-bit or 32-bit.
// This might not be supported on all machines.
vtkSetMacro(Quality,int);
vtkGetMacro(Quality,int);
void SetQualityToDefault() {this->SetQuality(VTK_TEXTURE_QUALITY_DEFAULT);};
void SetQualityTo16Bit() {this->SetQuality(VTK_TEXTURE_QUALITY_16BIT);};
void SetQualityTo32Bit() {this->SetQuality(VTK_TEXTURE_QUALITY_32BIT);};
// Description:
// Turn on/off the mapping of color scalars through the lookup table.
// The default is Off. If Off, unsigned char scalars will be used
// directly as texture. If On, scalars will be mapped through the
// lookup table to generate 4-component unsigned char scalars.
// This ivar does not affect other scalars like unsigned short, float,
// etc. These scalars are always mapped through lookup tables.
vtkGetMacro(MapColorScalarsThroughLookupTable,int);
vtkSetMacro(MapColorScalarsThroughLookupTable,int);
vtkBooleanMacro(MapColorScalarsThroughLookupTable,int);
//BTX
// Description:
// This process object accepts image data as input.
vtkImageData *GetInput();
//ETX
// Description:
// Specify the lookup table to convert scalars if necessary
void SetLookupTable(vtkLookupTable *);
vtkGetObjectMacro(LookupTable,vtkLookupTable);
// Description:
// Get Mapped Scalars
vtkGetObjectMacro(MappedScalars,vtkUnsignedCharArray);
// Description:
// Map scalar values into color scalars.
unsigned char *MapScalarsToColors (vtkDataArray *scalars);
protected:
vtkTexture();
~vtkTexture();
int Repeat;
int Interpolate;
int Quality;
int MapColorScalarsThroughLookupTable;
vtkLookupTable *LookupTable;
vtkUnsignedCharArray *MappedScalars;
// this is to duplicated the previous behavior of SelfCreatedLookUpTable
int SelfAdjustingTableRange;
private:
vtkTexture(const vtkTexture&); // Not implemented.
void operator=(const vtkTexture&); // Not implemented.
};
#endif
|