44 #ifndef __vtkUnstructuredGridPartialPreIntegration_h
45 #define __vtkUnstructuredGridPartialPreIntegration_h
50 class vtkPartialPreIntegrationTransferFunction;
71 static void IntegrateRay(
double length,
72 double intensity_front,
double attenuation_front,
73 double intensity_back,
double attenuation_back,
75 static void IntegrateRay(
double length,
76 const double color_front[3],
77 double attenuation_front,
78 const double color_back[3],
79 double attenuation_back,
88 static float Psi(
float taufD,
float taubD);
89 static float *GetPsiTable(
int &
size);
90 static void BuildPsiTable();
104 enum {PSI_TABLE_SIZE = 512};
106 static float PsiTable[PSI_TABLE_SIZE*PSI_TABLE_SIZE];
117 float gammaf = taufD/(taufD+1);
118 float gammab = taubD/(taubD+1);
121 return PsiTable[gammafi*PSI_TABLE_SIZE + gammabi];
132 double intensity_front,
133 double attenuation_front,
134 double intensity_back,
135 double attenuation_back,
138 float taufD = length*attenuation_front;
139 float taubD = length*attenuation_back;
141 float zeta =
static_cast<float>(exp(-0.5*(taufD+taubD)));
142 float alpha = 1-zeta;
144 float newintensity = (1-color[3])*( intensity_front*(1-Psi)
145 + intensity_back*(Psi-zeta) );
147 color[0] += newintensity;
148 color[1] += newintensity;
149 color[2] += newintensity;
150 color[3] += (1-color[3])*alpha;
155 const double color_front[3],
156 double attenuation_front,
157 const double color_back[3],
158 double attenuation_back,
161 float taufD = length*attenuation_front;
162 float taubD = length*attenuation_back;
164 float zeta =
static_cast<float>(exp(-0.5*(taufD+taubD)));
165 float alpha = 1-zeta;
167 color[0] += (1-color[3])*(color_front[0]*(1-Psi) + color_back[0]*(Psi-zeta));
168 color[1] += (1-color[3])*(color_front[1]*(1-Psi) + color_back[1]*(Psi-zeta));
169 color[2] += (1-color[3])*(color_front[2]*(1-Psi) + color_back[2]*(Psi-zeta));
170 color[3] += (1-color[3])*alpha;
173 #endif //__vtkUnstructuredGridPartialPreIntegration_h
represents a volume (data & properties) in a rendered scene
vtkTimeStamp TransferFunctionsModified
performs piecewise linear ray integration.
virtual void Initialize(vtkVolume *volume, vtkDataArray *scalars)=0
record modification and/or execution time
static float PsiTable[PSI_TABLE_SIZE *PSI_TABLE_SIZE]
vtkPartialPreIntegrationTransferFunction * TransferFunctions
dynamic, self-adjusting array of double
a superclass for volume ray integration functions
static void IntegrateRay(double length, double intensity_front, double attenuation_front, double intensity_back, double attenuation_back, float color[4])
a simple class to control print indentation
static int Floor(double x)
abstract superclass for arrays of numeric data
int NumIndependentComponents
represents the common properties for rendering a volume.
vtkVolumeProperty * Property
virtual void PrintSelf(ostream &os, vtkIndent indent)
static float * GetPsiTable(int &size)
static float Psi(float taufD, float taubD)
virtual void Integrate(vtkDoubleArray *intersectionLengths, vtkDataArray *nearIntersections, vtkDataArray *farIntersections, float color[4])=0