#include <ray.h>
Inheritance diagram for Ray:
Public Methods | |
Ray () | |
~Ray () | |
bool | SetViewingCondition (VECTOR lightpos, float ambient, float diffuse, float specular, int highlight) |
bool | Initialize (Color background, Color current, float steplength, Plane *viewingplane, Data *data, Transfunc *tf) |
bool | SetPosDir (VECTOR currentpos, VECTOR direction) |
Color | GetCurrentColor () |
float | GetAlpha () |
void | SetLight (bool light) |
virtual bool | CastNext () |
bool | Reset () |
Protected Methods | |
virtual Color | Lighting (Color color) |
Protected Attributes | |
bool | m_light |
VECTOR | m_lightpos |
VECTOR | m_currentpos |
float | m_ambient |
float | m_diffuse |
float | m_specular |
int | m_highlight |
Transfunc * | m_tf |
Data * | m_data |
Color | m_backgroundcolor |
Color | m_currentcolor |
float | m_alpha |
VECTOR | m_startpoint |
VECTOR | m_direction |
float | m_steplength |
Plane * | m_viewingplane |
float | mx |
float | my |
float | mz |
float | m_radius |
|
Definition at line 5 of file ray.cpp. References m_alpha, m_ambient, m_backgroundcolor, m_currentcolor, m_currentpos, m_data, m_diffuse, m_direction, m_highlight, m_light, m_specular, m_startpoint, m_steplength, m_tf, m_viewingplane, mx, my, and mz.
00005 { 00006 // richtungsvektor 00007 m_direction = VECTOR(1,0,0); 00008 // aktuelle position am strahl 00009 m_currentpos = VECTOR(0,0,0); 00010 // Koeffizient für ambient lighting 00011 m_ambient = 0.2f; 00012 // Koeffizient für diffuses lighting 00013 m_diffuse = 0.2f; 00014 // Transferfubction 00015 m_tf = NULL; 00016 // datenvolumen 00017 m_data = NULL; 00018 // Hintergrundfarbe 00019 m_backgroundcolor = Color(0.0,0.0,0.0); 00020 // aktuelle Gesamtfarbe 00021 m_currentcolor = Color(0.0,0.0,0.0); 00022 // aktueller Alphawert 00023 m_alpha = 0.0; 00024 // Startpunkt 00025 m_startpoint = VECTOR(0,0,0); 00026 // Endpunkt 00027 m_steplength = 1.0; 00028 m_specular = 0.2f; 00029 00030 m_highlight = 8; 00031 00032 m_light = false; 00033 m_viewingplane = NULL; 00034 mx = 0.0f; 00035 my = 0.0f; 00036 mz = 0.0f; 00037 } |
|
Definition at line 39 of file ray.cpp.
00039 {} |
|
Reimplemented in Trilinear, FirstHitNN, FirstHitTRI, MaxIntensityNN, MaxIntensityTRI, XRayNN, XRayTRI, AverageNN, and AverageTRI. Definition at line 110 of file ray.cpp. References Data::GetDensity(), Transfunc::GetDensityColor(), Transfunc::GetOpacity(), VECTOR::length(), Lighting(), m_alpha, m_backgroundcolor, m_currentcolor, m_currentpos, m_data, m_direction, m_radius, m_startpoint, m_steplength, m_tf, mx, my, mz, ROUND, VECTOR::x, VECTOR::y, and VECTOR::z. Referenced by Perspective::Raycast(), and Raycaster::Raycast().
00110 { 00111 00112 if(m_data == NULL) return false; 00113 if(m_tf == NULL) return false; 00114 00115 bool first = true; 00116 int step_count = 0; 00117 VECTOR distancetomidpoint = VECTOR(mx/2.0f,my/2.0f,mz/2.0f)-m_currentpos; 00118 int steps = (int)((distancetomidpoint.length() + m_radius)/m_steplength); 00119 do { 00120 if(m_alpha > 0.99) break; 00121 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)) { 00122 if(first) { 00123 m_startpoint = VECTOR(m_currentpos.x,m_currentpos.y,m_currentpos.z); 00124 first = false; 00125 } 00126 int d = m_data->GetDensity((int)ROUND(m_currentpos.x),(int)ROUND(m_currentpos.y),(int)ROUND(m_currentpos.z)); 00127 00128 Color help_color = m_tf->GetDensityColor(d); 00129 float help_alpha = m_tf->GetOpacity(d); 00130 // lightning: 00131 help_color = Lighting(help_color); 00132 // calculate new currentcolor: 00133 m_currentcolor += help_color*(1-m_alpha)*help_alpha; 00134 // calculate new alphavalue 00135 m_alpha += (1-m_alpha)*help_alpha; 00136 } 00137 // calculate new position 00138 m_currentpos += m_steplength*m_direction; 00139 00140 step_count++; 00141 }while(step_count <= steps); 00142 if(m_alpha < 1.0 ) { 00143 m_currentcolor += m_backgroundcolor*(1.0f-m_alpha); 00144 } 00145 return true; 00146 } |
|
Definition at line 57 of file ray.h.
00057 { return m_alpha;}; |
|
Definition at line 83 of file ray.cpp. References m_currentcolor. Referenced by Perspective::Raycast(), and Raycaster::Raycast().
00083 { 00084 return m_currentcolor; 00085 } |
|
Definition at line 88 of file ray.cpp. References Data::GetXDim(), Data::GetYDim(), Data::GetZDim(), m_backgroundcolor, m_currentcolor, m_data, m_radius, m_steplength, m_tf, m_viewingplane, mx, my, and mz. Referenced by Perspective::Raycast(), and Raycaster::Raycast().
00088 { 00089 m_backgroundcolor = background; 00090 m_currentcolor = current; 00091 m_data = data; 00092 m_tf = tf; 00093 m_steplength = steplength; 00094 m_viewingplane = viewingplane; 00095 mx = (float)m_data->GetXDim(); 00096 my = (float)m_data->GetYDim(); 00097 mz = (float)m_data->GetZDim(); 00098 m_radius = sqrt(pow(mx/2.0f,2)+pow(my/2.0f,2)+pow(mz/2.0f,2)); 00099 return true; 00100 } |
|
Reimplemented in Trilinear. Definition at line 63 of file ray.cpp. References Data::CalcGrad(), VECTOR::dot(), VECTOR::length(), m_ambient, m_currentpos, m_data, m_diffuse, m_direction, m_highlight, m_lightpos, m_specular, m_startpoint, VECTOR::normalize(), ROUND, gradient_t::x, VECTOR::x, gradient_t::y, VECTOR::y, gradient_t::z, and VECTOR::z. Referenced by FirstHitNN::CastNext(), and CastNext().
00063 { 00064 gradient_t grad = m_data->CalcGrad((int)ROUND(m_currentpos.x),(int)ROUND(m_currentpos.y),(int)ROUND(m_currentpos.z)); 00065 VECTOR normal = VECTOR(grad.x, grad.y, grad.z); 00066 normal.normalize(); // normalize normal 00067 VECTOR len = m_currentpos - m_startpoint; 00068 Color ret; 00069 if(m_light) { 00070 VECTOR v = -m_direction; 00071 v.normalize(); 00072 VECTOR l = m_lightpos-m_currentpos; 00073 l.normalize(); 00074 VECTOR h = (v+l); 00075 h.normalize(); 00076 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()); 00077 } 00078 else ret = color*m_ambient + color*(m_diffuse*(normal.dot(m_direction))) + color/(4.0f+1000000.0f*len.length()); 00079 return ret; 00080 } |
|
Definition at line 60 of file ray.h. Referenced by Perspective::Raycast(), and Raycaster::Raycast().
00060 {m_alpha = 0.0; m_currentcolor = m_backgroundcolor; return true;}; |
|
Definition at line 58 of file ray.h. Referenced by Perspective::Raycast(), and Raycaster::Raycast().
00058 { m_light = light;}; |
|
Definition at line 103 of file ray.cpp. References m_currentpos, and m_direction. Referenced by Perspective::Raycast(), and Raycaster::Raycast().
00103 { 00104 m_currentpos = currentpos; 00105 m_direction = direction; 00106 return true; 00107 } |
|
Definition at line 42 of file ray.cpp. References m_ambient, m_diffuse, m_highlight, and m_specular. Referenced by Perspective::Raycast(), and Raycaster::Raycast().
00042 { 00043 00044 if (ambient > 1.0) ambient = 1.0; 00045 if (ambient < 0.0) ambient = 0.0; 00046 if (diffuse > 1.0) diffuse = 1.0; 00047 if (diffuse < 0.0) diffuse = 0.0; 00048 if (specular > 1.0) specular = 1.0; 00049 if (specular < 0.0) specular = 0.0; 00050 if(highlight < 0) highlight = 0; 00051 00052 m_highlight = highlight; 00053 m_specular = specular; 00054 m_ambient = ambient; 00055 m_diffuse = diffuse; 00056 return true; 00057 } |
|
Definition at line 39 of file ray.h. Referenced by AverageTRI::CastNext(), AverageNN::CastNext(), XRayTRI::CastNext(), XRayNN::CastNext(), MaxIntensityTRI::CastNext(), MaxIntensityNN::CastNext(), FirstHitTRI::CastNext(), FirstHitNN::CastNext(), Trilinear::CastNext(), CastNext(), and Ray(). |
|
Definition at line 23 of file ray.h. Referenced by Trilinear::Lighting(), Lighting(), Ray(), and SetViewingCondition(). |
|
Definition at line 35 of file ray.h. Referenced by AverageTRI::CastNext(), AverageNN::CastNext(), XRayTRI::CastNext(), XRayNN::CastNext(), MaxIntensityTRI::CastNext(), MaxIntensityNN::CastNext(), FirstHitTRI::CastNext(), FirstHitNN::CastNext(), Trilinear::CastNext(), CastNext(), Initialize(), and Ray(). |
|
Definition at line 37 of file ray.h. Referenced by AverageTRI::CastNext(), AverageNN::CastNext(), XRayTRI::CastNext(), XRayNN::CastNext(), MaxIntensityTRI::CastNext(), MaxIntensityNN::CastNext(), FirstHitTRI::CastNext(), FirstHitNN::CastNext(), Trilinear::CastNext(), CastNext(), GetCurrentColor(), Initialize(), and Ray(). |
|
Definition at line 21 of file ray.h. Referenced by AverageTRI::CastNext(), AverageNN::CastNext(), XRayTRI::CastNext(), XRayNN::CastNext(), MaxIntensityTRI::CastNext(), MaxIntensityNN::CastNext(), FirstHitTRI::CastNext(), FirstHitNN::CastNext(), Trilinear::CastNext(), CastNext(), Trilinear::Lighting(), Lighting(), Ray(), and SetPosDir(). |
|
|
Definition at line 25 of file ray.h. Referenced by Trilinear::Lighting(), Lighting(), Ray(), and SetViewingCondition(). |
|
Definition at line 43 of file ray.h. Referenced by AverageTRI::CastNext(), AverageNN::CastNext(), XRayTRI::CastNext(), XRayNN::CastNext(), MaxIntensityTRI::CastNext(), MaxIntensityNN::CastNext(), FirstHitTRI::CastNext(), FirstHitNN::CastNext(), Trilinear::CastNext(), CastNext(), Trilinear::Lighting(), Lighting(), Ray(), and SetPosDir(). |
|
Definition at line 29 of file ray.h. Referenced by Trilinear::Lighting(), Lighting(), Ray(), and SetViewingCondition(). |
|
Definition at line 15 of file ray.h. Referenced by MaxIntensityNN::CastNext(), and Ray(). |
|
Definition at line 16 of file ray.h. Referenced by Trilinear::Lighting(), and Lighting(). |
|
Definition at line 47 of file ray.h. Referenced by AverageTRI::CastNext(), AverageNN::CastNext(), XRayTRI::CastNext(), XRayNN::CastNext(), MaxIntensityTRI::CastNext(), MaxIntensityNN::CastNext(), FirstHitTRI::CastNext(), FirstHitNN::CastNext(), Trilinear::CastNext(), CastNext(), and Initialize(). |
|
Definition at line 27 of file ray.h. Referenced by Trilinear::Lighting(), Lighting(), Ray(), and SetViewingCondition(). |
|
Definition at line 41 of file ray.h. Referenced by AverageTRI::CastNext(), AverageNN::CastNext(), XRayTRI::CastNext(), XRayNN::CastNext(), MaxIntensityTRI::CastNext(), MaxIntensityNN::CastNext(), FirstHitTRI::CastNext(), FirstHitNN::CastNext(), Trilinear::CastNext(), CastNext(), Trilinear::Lighting(), Lighting(), and Ray(). |
|
Definition at line 44 of file ray.h. Referenced by AverageTRI::CastNext(), AverageNN::CastNext(), XRayTRI::CastNext(), XRayNN::CastNext(), MaxIntensityTRI::CastNext(), MaxIntensityNN::CastNext(), FirstHitTRI::CastNext(), FirstHitNN::CastNext(), Trilinear::CastNext(), CastNext(), Initialize(), and Ray(). |
|
Definition at line 31 of file ray.h. Referenced by Trilinear::CalcAlphaTrilinear(), Trilinear::CalcColorTrilinear(), AverageTRI::CastNext(), AverageNN::CastNext(), XRayTRI::CastNext(), XRayNN::CastNext(), MaxIntensityTRI::CastNext(), MaxIntensityNN::CastNext(), FirstHitTRI::CastNext(), FirstHitNN::CastNext(), Trilinear::CastNext(), CastNext(), Initialize(), and Ray(). |
|
Definition at line 45 of file ray.h. Referenced by Initialize(), and Ray(). |
|
Definition at line 47 of file ray.h. Referenced by AverageTRI::CastNext(), AverageNN::CastNext(), XRayTRI::CastNext(), XRayNN::CastNext(), MaxIntensityTRI::CastNext(), MaxIntensityNN::CastNext(), FirstHitTRI::CastNext(), FirstHitNN::CastNext(), Trilinear::CastNext(), CastNext(), Initialize(), and Ray(). |
|
Definition at line 47 of file ray.h. Referenced by AverageTRI::CastNext(), AverageNN::CastNext(), XRayTRI::CastNext(), XRayNN::CastNext(), MaxIntensityTRI::CastNext(), MaxIntensityNN::CastNext(), FirstHitTRI::CastNext(), FirstHitNN::CastNext(), Trilinear::CastNext(), CastNext(), Initialize(), and Ray(). |
|
Definition at line 47 of file ray.h. Referenced by AverageTRI::CastNext(), AverageNN::CastNext(), XRayTRI::CastNext(), XRayNN::CastNext(), MaxIntensityTRI::CastNext(), MaxIntensityNN::CastNext(), FirstHitTRI::CastNext(), FirstHitNN::CastNext(), Trilinear::CastNext(), CastNext(), Initialize(), and Ray(). |