#include <ray.h>
Inheritance diagram for Trilinear:

Public Methods | |
| Trilinear () | |
| bool | CastNext () |
Protected Methods | |
| Color | CalcColorTrilinear (VECTOR pos) |
| gradient_t | CalcGradTrilinear (VECTOR pos) |
| float | CalcAlphaTrilinear (VECTOR pos) |
| Color | Lighting (Color color) |
|
|
Definition at line 71 of file ray.h.
00071 {};
|
|
|
Definition at line 149 of file ray.cpp. References Data::GetDensity(), Transfunc::GetOpacity(), Ray::m_data, Ray::m_tf, VECTOR::x, VECTOR::y, and VECTOR::z. Referenced by FirstHitTRI::CastNext(), and CastNext().
00149 {
00150
00151 float a000 = m_tf->GetOpacity(m_data->GetDensity(floorf(pos.x),floorf(pos.y),floorf(pos.z)));
00152 float a001 = m_tf->GetOpacity(m_data->GetDensity(floorf(pos.x),floorf(pos.y),ceilf(pos.z)));
00153 float a010 = m_tf->GetOpacity(m_data->GetDensity(floorf(pos.x),ceilf(pos.y),floorf(pos.z)));
00154 float a011 = m_tf->GetOpacity(m_data->GetDensity(floorf(pos.x),ceilf(pos.y),ceilf(pos.z)));
00155 float a100 = m_tf->GetOpacity(m_data->GetDensity(ceilf(pos.x),floorf(pos.y),floorf(pos.z)));
00156 float a101 = m_tf->GetOpacity(m_data->GetDensity(ceilf(pos.x),floorf(pos.y),ceilf(pos.z)));
00157 float a110 = m_tf->GetOpacity(m_data->GetDensity(ceilf(pos.x),ceilf(pos.y),floorf(pos.z)));
00158 float a111 = m_tf->GetOpacity(m_data->GetDensity(ceilf(pos.x),ceilf(pos.y),ceilf(pos.z)));
00159
00160 float difX = abs(pos.x - floorf(pos.x));
00161 float difY = abs(pos.y - floorf(pos.y));
00162 float difZ = abs(pos.z - floorf(pos.z));
00163
00164 float aA = a000*difX + a100*abs(1.0f-difX);
00165 float aB = a010*difX + a110*abs(1.0f-difX);
00166 float aC = a011*difX + a111*abs(1.0f-difX);
00167 float aD = a001*difX + a101*abs(1.0f-difX);
00168
00169 float aE = aA*difZ + aD*abs(1.0f-difZ);
00170 float aF = aB*difZ + aC*abs(1.0f-difZ);
00171
00172 float a = aE*difY + aF*abs(1.0f-difY);
00173 return a;
00174 }
|
|
|
Definition at line 204 of file ray.cpp. References Data::GetDensity(), Transfunc::GetDensityColor(), Ray::m_data, Ray::m_tf, VECTOR::x, VECTOR::y, and VECTOR::z. Referenced by FirstHitTRI::CastNext(), and CastNext().
00204 {
00205 Color col000 = m_tf->GetDensityColor(m_data->GetDensity(floorf(pos.x),floorf(pos.y),floorf(pos.z)));
00206 Color col001 = m_tf->GetDensityColor(m_data->GetDensity(floorf(pos.x),floorf(pos.y),ceilf(pos.z)));
00207 Color col010 = m_tf->GetDensityColor(m_data->GetDensity(floorf(pos.x),ceilf(pos.y),floorf(pos.z)));
00208 Color col011 = m_tf->GetDensityColor(m_data->GetDensity(floorf(pos.x),ceilf(pos.y),ceilf(pos.z)));
00209 Color col100 = m_tf->GetDensityColor(m_data->GetDensity(ceilf(pos.x),floorf(pos.y),floorf(pos.z)));
00210 Color col101 = m_tf->GetDensityColor(m_data->GetDensity(ceilf(pos.x),floorf(pos.y),ceilf(pos.z)));
00211 Color col110 = m_tf->GetDensityColor(m_data->GetDensity(ceilf(pos.x),ceilf(pos.y),floorf(pos.z)));
00212 Color col111 = m_tf->GetDensityColor(m_data->GetDensity(ceilf(pos.x),ceilf(pos.y),ceilf(pos.z)));
00213
00214
00215 float difX = abs(pos.x - floorf(pos.x));
00216 float difY = abs(pos.y - floorf(pos.y));
00217 float difZ = abs(pos.z - floorf(pos.z));
00218
00219 Color colA = col000*difX + col100*abs(1.0f-difX);
00220 Color colB = col010*difX + col110*abs(1.0f-difX);
00221 Color colC = col011*difX + col111*abs(1.0f-difX);
00222 Color colD = col001*difX + col101*abs(1.0f-difX);
00223
00224 Color colE = colA*difZ + colD*abs(1.0f-difZ);
00225 Color colF = colB*difZ + colC*abs(1.0f-difZ);
00226
00227 Color col = colE*difY + colF*abs(1.0f-difY);
00228 return col;
00229 }
|
|
|
Definition at line 177 of file ray.cpp. References Data::CalcGrad(), Ray::m_data, VECTOR::x, VECTOR::y, and VECTOR::z. Referenced by Lighting().
00177 {
00178 gradient_t grad000 = m_data->CalcGrad(floorf(pos.x),floorf(pos.y),floorf(pos.z));
00179 gradient_t grad001 = m_data->CalcGrad(floorf(pos.x),floorf(pos.y),ceilf(pos.z));
00180 gradient_t grad010 = m_data->CalcGrad(floorf(pos.x),ceilf(pos.y),floorf(pos.z));
00181 gradient_t grad011 = m_data->CalcGrad(floorf(pos.x),ceilf(pos.y),ceilf(pos.z));
00182 gradient_t grad100 = m_data->CalcGrad(ceilf(pos.x),floorf(pos.y),floorf(pos.z));
00183 gradient_t grad101 = m_data->CalcGrad(ceilf(pos.x),floorf(pos.y),ceilf(pos.z));
00184 gradient_t grad110 = m_data->CalcGrad(ceilf(pos.x),ceilf(pos.y),floorf(pos.z));
00185 gradient_t grad111 = m_data->CalcGrad(ceilf(pos.x),ceilf(pos.y),ceilf(pos.z));
00186
00187 float difX = abs(pos.x - floorf(pos.x));
00188 float difY = abs(pos.y - floorf(pos.y));
00189 float difZ = abs(pos.z - floorf(pos.z));
00190
00191 gradient_t gradA = grad000*difX + grad100*abs(1.0f-difX);
00192 gradient_t gradB = grad010*difX + grad110*abs(1.0f-difX);
00193 gradient_t gradC = grad011*difX + grad111*abs(1.0f-difX);
00194 gradient_t gradD = grad001*difX + grad101*abs(1.0f-difX);
00195
00196 gradient_t gradE = gradA*difZ + gradD*abs(1.0f-difZ);
00197 gradient_t gradF = gradB*difZ + gradC*abs(1.0f-difZ);
00198
00199 gradient_t grad = gradE*difY + gradF*abs(1.0f-difY);
00200 return grad;
00201 }
|
|
|
Reimplemented from Ray. Reimplemented in FirstHitTRI, MaxIntensityTRI, XRayTRI, and AverageTRI. Definition at line 254 of file ray.cpp. References CalcAlphaTrilinear(), CalcColorTrilinear(), VECTOR::length(), Lighting(), Ray::m_alpha, Ray::m_backgroundcolor, Ray::m_currentcolor, Ray::m_currentpos, Ray::m_data, Ray::m_direction, Ray::m_radius, Ray::m_startpoint, Ray::m_steplength, Ray::m_tf, Ray::mx, Ray::my, Ray::mz, VECTOR::x, VECTOR::y, and VECTOR::z.
00254 {
00255
00256 if(m_data == NULL) return false;
00257 if(m_tf == NULL) return false;
00258
00259 int step_count = 0;
00260 bool first = true;
00261 VECTOR distancetomidpoint = VECTOR(mx/2.0f,my/2.0f,mz/2.0f)-m_currentpos;
00262 int steps = (int)((distancetomidpoint.length() + m_radius)/m_steplength);
00263
00264 do {
00265 if(m_alpha > 0.99) break;
00266 if((m_currentpos.x >= 0.0)&&(m_currentpos.y >= 0.0)&&(m_currentpos.z >= 0.0)&&(m_currentpos.x < mx)&&(m_currentpos.y < my)&&(m_currentpos.z < mz)) {
00267 if(first) {
00268 m_startpoint = VECTOR(m_currentpos.x,m_currentpos.y,m_currentpos.z);
00269 first = false;
00270 }
00271 Color help_color = CalcColorTrilinear(m_currentpos);
00272 float help_alpha = CalcAlphaTrilinear(m_currentpos);
00273 // lightning:
00274 help_color = Lighting(help_color);
00275 // calculate new currentcolor:
00276 m_currentcolor += help_color*(1-m_alpha)*help_alpha;
00277 // calculate new alphavalue
00278 m_alpha += (1-m_alpha)*help_alpha;
00279 }
00280 // calculate new position
00281 m_currentpos += m_steplength*m_direction;
00282
00283 step_count++;
00284 }while(step_count <= steps);
00285 if(m_alpha < 1.0 ) {
00286 m_currentcolor += m_backgroundcolor*(1.0-m_alpha);
00287 }
00288 return true;
00289 }
|
|
|
Reimplemented from Ray. Definition at line 233 of file ray.cpp. References CalcGradTrilinear(), VECTOR::dot(), VECTOR::length(), Ray::m_ambient, Ray::m_currentpos, Ray::m_diffuse, Ray::m_direction, Ray::m_highlight, Ray::m_lightpos, Ray::m_specular, Ray::m_startpoint, VECTOR::normalize(), gradient_t::x, gradient_t::y, and gradient_t::z. Referenced by FirstHitTRI::CastNext(), and CastNext().
00233 {
00234 gradient_t g = CalcGradTrilinear(m_currentpos);
00235 VECTOR normal = VECTOR(g.x, g.y, g.z);
00236 normal.normalize(); // normalize normal
00237
00238 VECTOR len = m_currentpos-m_startpoint;
00239 Color ret;
00240 if(m_light) {
00241 VECTOR v = -m_direction;
00242 v.normalize();
00243 VECTOR l = m_lightpos-m_currentpos;
00244 l.normalize();
00245 VECTOR h = (v+l);
00246 h.normalize();
00247 ret = color*m_ambient + color*((m_diffuse*(normal.dot(m_direction))) + (m_specular*pow(normal.dot(h),m_highlight)))+ color/(4.0f+1000000.0f*len.length());
00248 }
00249 else ret = color*m_ambient + color*(m_diffuse*(normal.dot(m_direction))) + color/(4.0f+1000000.0f*len.length());
00250 return ret;
00251 }
|
1.3-rc2