#include <ray.h>
Inheritance diagram for FirstHitTRI:
Public Methods | |
FirstHitTRI () | |
bool | SetTreshold (int treshold) |
bool | CastNext () |
Protected Methods | |
float | GetDensity (VECTOR pos) |
Protected Attributes | |
int | m_treshold |
|
Definition at line 92 of file ray.h.
00092 {m_treshold = 0.0;}; |
|
Reimplemented from Trilinear. Reimplemented in MaxIntensityTRI, XRayTRI, and AverageTRI. Definition at line 361 of file ray.cpp. References Trilinear::CalcAlphaTrilinear(), Trilinear::CalcColorTrilinear(), GetDensity(), VECTOR::length(), Trilinear::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, m_treshold, Ray::mx, Ray::my, Ray::mz, VECTOR::x, VECTOR::y, and VECTOR::z.
00361 { 00362 00363 if(m_data == NULL) return false; 00364 if(m_tf == NULL) return false; 00365 00366 int step_count = 0; 00367 VECTOR distancetomidpoint = VECTOR(mx/2.0f,my/2.0f,mz/2.0f)-m_currentpos; 00368 int steps = (int)((distancetomidpoint.length() + m_radius)/m_steplength); 00369 bool first = true; 00370 do { 00371 00372 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)) { 00373 if(first) { 00374 m_startpoint = VECTOR(m_currentpos.x,m_currentpos.y,m_currentpos.z); 00375 first = false; 00376 } 00377 float d = GetDensity(m_currentpos); 00378 if(d > (float)m_treshold) { 00379 Color help_color = CalcColorTrilinear(m_currentpos); 00380 float help_alpha = CalcAlphaTrilinear(m_currentpos); 00381 // lightning: 00382 help_color = Lighting(help_color); 00383 // calculate new currentcolor: 00384 m_currentcolor = help_color; 00385 // calculate new alphavalue 00386 m_alpha = help_alpha; 00387 break; 00388 } 00389 // calculate new position 00390 } 00391 m_currentpos += m_steplength*m_direction; 00392 step_count++; 00393 }while(step_count <= steps); 00394 if(m_alpha < 1.0 ) { 00395 m_currentcolor += m_backgroundcolor*(1.0f-m_alpha); 00396 } 00397 return true; 00398 } |
|
Definition at line 334 of file ray.cpp. References Data::GetDensity(), Ray::m_data, VECTOR::x, VECTOR::y, and VECTOR::z. Referenced by AverageTRI::CastNext(), XRayTRI::CastNext(), MaxIntensityTRI::CastNext(), and CastNext().
00334 { 00335 int dat000 = m_data->GetDensity(floorf(pos.x),floorf(pos.y),floorf(pos.z)); 00336 int dat001 = m_data->GetDensity(floorf(pos.x),floorf(pos.y),ceilf(pos.z)); 00337 int dat010 = m_data->GetDensity(floorf(pos.x),ceilf(pos.y),floorf(pos.z)); 00338 int dat011 = m_data->GetDensity(floorf(pos.x),ceilf(pos.y),ceilf(pos.z)); 00339 int dat100 = m_data->GetDensity(ceilf(pos.x),floorf(pos.y),floorf(pos.z)); 00340 int dat101 = m_data->GetDensity(ceilf(pos.x),floorf(pos.y),ceilf(pos.z)); 00341 int dat110 = m_data->GetDensity(ceilf(pos.x),ceilf(pos.y),floorf(pos.z)); 00342 int dat111 = m_data->GetDensity(ceilf(pos.x),ceilf(pos.y),ceilf(pos.z)); 00343 00344 float difX = abs(pos.x - floorf(pos.x)); 00345 float difY = abs(pos.y - floorf(pos.y)); 00346 float difZ = abs(pos.z - floorf(pos.z)); 00347 00348 int datA = dat000*difX + dat100*abs(1.0f-difX); 00349 int datB = dat010*difX + dat110*abs(1.0f-difX); 00350 int datC = dat011*difX + dat111*abs(1.0f-difX); 00351 int datD = dat001*difX + dat101*abs(1.0f-difX); 00352 00353 int datE = datA*difZ + datD*abs(1.0f-difZ); 00354 int datF = datB*difZ + datC*abs(1.0f-difZ); 00355 00356 int dat = datE*difY + datF*abs(1.0f-difY); 00357 return dat; 00358 } |
|
Definition at line 93 of file ray.h.
00093 { m_treshold = treshold; return true;}; |
|
Definition at line 89 of file ray.h. Referenced by CastNext(). |