#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 96 of file ray.h. 
 00096 {m_treshold = 0.0;};
 | 
  
      
  | 
  
| 
 berechnet den farbwert eines Strahls indem er das Volumen an diskreten Punkten abtastet, dort einen Dichtewert erhält, ist dieser Dichtewerte größer als ein zuvor gesetztes Minimum so wird dieser zur Farbberechnung herangezogen und kein weiterer Schritt in das volumen getätigt, andernfalls wird im Volumen vorwärts gegangen bis das Ende des Volumens erreicht ist Reimplemented from Trilinear. Reimplemented in MaxIntensityTRI, and XRayTRI. Definition at line 397 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. 
 00397                       {
00398         
00399         if(m_data == NULL) return false;
00400         if(m_tf == NULL) return false;
00401         
00402         int step_count = 0;
00403         VECTOR distancetomidpoint = VECTOR(mx/2.0f,my/2.0f,mz/2.0f)-m_currentpos;
00404         int steps = (int)((distancetomidpoint.length() + m_radius)/m_steplength);
00405         bool first = true;
00406         do {
00407                 
00408                 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)) {
00409                         if(first) {
00410                                 m_startpoint = VECTOR(m_currentpos.x,m_currentpos.y,m_currentpos.z);
00411                                 first = false;
00412                         }
00413                         float d = GetDensity(m_currentpos);
00414                         if(d > (float)m_treshold) {
00415                                 Color help_color = CalcColorTrilinear(m_currentpos);
00416                                 float help_alpha = CalcAlphaTrilinear(m_currentpos);
00417                                 // lightning:
00418                                 help_color = Lighting(help_color);
00419                                 // calculate new currentcolor:
00420                                 m_currentcolor = help_color;
00421                                 // calculate new alphavalue
00422                                 m_alpha = help_alpha;
00423                                 break;
00424                         }
00425                         // calculate new position
00426                 }
00427                 m_currentpos += m_steplength*m_direction;
00428                 step_count++;
00429         }while(step_count <= steps);
00430         if(m_alpha < 1.0 ) {
00431                 m_currentcolor += m_backgroundcolor*(1.0f-m_alpha);
00432         }
00433         return true;
00434 }
 | 
  
      
  | 
  
| 
 berechnet dichtewert an einer Position im Volumen mit Hilfe trilinearer Interpolation Definition at line 365 of file ray.cpp. References Data::GetDensity(), Ray::m_data, VECTOR::x, VECTOR::y, and VECTOR::z. Referenced by XRayTRI::CastNext(), MaxIntensityTRI::CastNext(), and CastNext(). 
 00365                                   {
00366         int dat000 = m_data->GetDensity(floorf(pos.x),floorf(pos.y),floorf(pos.z));
00367         int dat001 = m_data->GetDensity(floorf(pos.x),floorf(pos.y),ceilf(pos.z));
00368         int dat010 = m_data->GetDensity(floorf(pos.x),ceilf(pos.y),floorf(pos.z));
00369         int dat011 = m_data->GetDensity(floorf(pos.x),ceilf(pos.y),ceilf(pos.z));
00370         int dat100 = m_data->GetDensity(ceilf(pos.x),floorf(pos.y),floorf(pos.z));
00371         int dat101 = m_data->GetDensity(ceilf(pos.x),floorf(pos.y),ceilf(pos.z));
00372         int dat110 = m_data->GetDensity(ceilf(pos.x),ceilf(pos.y),floorf(pos.z));
00373         int dat111 = m_data->GetDensity(ceilf(pos.x),ceilf(pos.y),ceilf(pos.z));
00374 
00375         float difX = abs(pos.x - floorf(pos.x));
00376         float difY = abs(pos.y - floorf(pos.y));
00377         float difZ = abs(pos.z - floorf(pos.z));
00378 
00379         int datA = dat000*difX + dat100*abs(1.0f-difX);
00380         int datB = dat010*difX + dat110*abs(1.0f-difX);
00381         int datC = dat011*difX + dat111*abs(1.0f-difX);
00382         int datD = dat001*difX + dat101*abs(1.0f-difX);
00383 
00384         int datE = datA*difZ + datD*abs(1.0f-difZ);
00385         int datF = datB*difZ + datC*abs(1.0f-difZ);
00386 
00387         int dat = datE*difY + datF*abs(1.0f-difY);
00388         return dat;
00389 }
 | 
  
      
  | 
  
| 
 
 Definition at line 97 of file ray.h. 
 00097 { m_treshold = treshold; return true;};
 | 
  
      
  | 
  
| 
 
 Definition at line 93 of file ray.h. Referenced by CastNext().  | 
  
1.3-rc2