44 #ifndef __vtkUnstructuredGridPartialPreIntegration_h
45 #define __vtkUnstructuredGridPartialPreIntegration_h
47 #include "vtkRenderingVolumeModule.h"
51 class vtkPartialPreIntegrationTransferFunction;
72 static void IntegrateRay(
double length,
73 double intensity_front,
double attenuation_front,
74 double intensity_back,
double attenuation_back,
76 static void IntegrateRay(
double length,
77 const double color_front[3],
78 double attenuation_front,
79 const double color_back[3],
80 double attenuation_back,
89 static float Psi(
float taufD,
float taubD);
90 static float *GetPsiTable(
int &
size);
91 static void BuildPsiTable();
105 enum {PSI_TABLE_SIZE = 512};
107 static float PsiTable[PSI_TABLE_SIZE*PSI_TABLE_SIZE];
118 float gammaf = taufD/(taufD+1);
119 float gammab = taubD/(taubD+1);
122 return PsiTable[gammafi*PSI_TABLE_SIZE + gammabi];
133 double intensity_front,
134 double attenuation_front,
135 double intensity_back,
136 double attenuation_back,
139 float taufD = length*attenuation_front;
140 float taubD = length*attenuation_back;
142 float zeta =
static_cast<float>(exp(-0.5*(taufD+taubD)));
143 float alpha = 1-zeta;
145 float newintensity = (1-color[3])*( intensity_front*(1-Psi)
146 + intensity_back*(Psi-zeta) );
148 color[0] += newintensity;
149 color[1] += newintensity;
150 color[2] += newintensity;
151 color[3] += (1-color[3])*alpha;
156 const double color_front[3],
157 double attenuation_front,
158 const double color_back[3],
159 double attenuation_back,
162 float taufD = length*attenuation_front;
163 float taubD = length*attenuation_back;
165 float zeta =
static_cast<float>(exp(-0.5*(taufD+taubD)));
166 float alpha = 1-zeta;
168 color[0] += (1-color[3])*(color_front[0]*(1-Psi) + color_back[0]*(Psi-zeta));
169 color[1] += (1-color[3])*(color_front[1]*(1-Psi) + color_back[1]*(Psi-zeta));
170 color[2] += (1-color[3])*(color_front[2]*(1-Psi) + color_back[2]*(Psi-zeta));
171 color[3] += (1-color[3])*alpha;
174 #endif //__vtkUnstructuredGridPartialPreIntegration_h