00001 #ifndef RAYCASTER_H
00002 #define RAYCASTER_H
00003
00004
00005
00006 #include "ray.h"
00007 #include "matrix.h"
00008 #define PI 3.141592654
00009
00010 enum {
00011 RAYCASTER, PERSPECTIVE
00012 };
00013
00014
00015 class Raycaster {
00016
00017
00018 protected:
00019
00020 bool ready;
00021 bool m_light;
00022 VECTOR m_lightpos;
00023
00024 float m_ambient, m_diffuse, m_steplength, m_specular;
00025 int m_treshold, m_highlight;
00026 Plane *m_viewingplane;
00027 int m_width, m_height;
00028 Matrix4x4 *m_viewingtoworld;
00029 int m_raytype, m_rendermode;
00030 rgb *m_image;
00031 Data *m_data;
00032 Transfunc *m_tf;
00033 Color m_background;
00034 bool m_precalc;
00035 float m_zoom;
00036 float m_stepX, m_stepY;
00037 VECTOR m_xdir, m_ydir;
00038 bool SetViewingMatrix();
00039 public:
00040 Raycaster();
00041 ~Raycaster();
00042 bool SetViewingCondition(VECTOR lightpos, Color background, float ambient, float diffuse, float specular, int highlight);
00043
00044 virtual bool Initialize(VECTOR viewingplanepos, int width, int height, float steplength, Data *data, Transfunc *tf);
00045 virtual bool Raycast();
00046
00047 bool SetTreshold(int treshold) { m_treshold = treshold; return true;};
00048 bool SetRaytype(int type) { m_raytype = type; return true;};
00049 bool SetRendermode(int rendermode) { m_rendermode = rendermode; return true;};
00050 bool SetPreCalcGradients(bool pc) { m_precalc = pc; return true;};
00051 bool Zoom(float zoom);
00052
00053 void SetWidth(int width) { m_width = width; };
00054 void SetHeight(int height) { m_height = height; };
00055 void SetStepLength(float steplength) { m_steplength = steplength; };
00056 void SetViewingPlanePos(float x, float y, float z);
00057 void SetAmbient(float ambient) { m_ambient = ambient; };
00058 void SetDiffuse(float diffuse) { m_diffuse = diffuse; };
00059 void SetSpecular(float specular) { m_specular = specular;};
00060 void SetHighlight(int highlight) {m_highlight = highlight;};
00061 void SetLightpos(VECTOR lightpos) { m_lightpos = lightpos;};
00062 void SetLight(bool light){m_light = light;};
00063 void SetBackgroundColor(unsigned char r, unsigned char g, unsigned char b) {
00064 m_background = Color(r, g, b); };
00065
00066
00067 virtual bool RotateX(float alpha);
00068 virtual bool RotateY(float alpha);
00069 virtual bool RotateZ(float alpha);
00070 bool Render(int width, int height);
00071
00072 int m_dOwnType;
00073
00074 rgb *GetScreenShotImage(int &width, int &height) { width = m_width;
00075 height = m_height;
00076 return m_image; };
00077 };
00078
00079 class Perspective : public Raycaster {
00080 private:
00081 VECTOR m_eye;
00082 float m_dist;
00083 public:
00084 Perspective();
00085 ~Perspective();
00086 bool Initialize(VECTOR eye, float dist, int width, int height, float steplength, Data *data, Transfunc *tf);
00087
00088 bool RotateX(float alpha);
00089 bool RotateY(float alpha);
00090 bool RotateZ(float alpha);
00091 bool Raycast();
00092 };
00093 #endif;