00001
00002
00003
00004
00005
00006
00007
00009
00010 #ifndef _VOLUME_RENDER_H
00011 #define _VOLUME_RENDER_H
00012
00013 #include <Cg/cgGL.h>
00014 #include "VolumeBuffer.h"
00015
00016
00017 class VolumeRender {
00018 public:
00019
00020 VolumeRender(CGcontext cg_context, VolumeBuffer *volume);
00021 ~VolumeRender();
00022
00023 void render();
00024 void renderSlice(int sn);
00025 void loaddata();
00026
00027 void setVolume(VolumeBuffer *volume) { m_volume = volume; }
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 GLuint m_tfid;
00039
00040
00041 GLuint m_tfid_s1;
00042 GLuint m_tfid_s2;
00043 GLuint m_tfid_s3;
00044
00045
00046 private:
00047 void loadPrograms();
00048
00049 VolumeBuffer *m_volume;
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063 CGcontext m_cg_context;
00064
00065
00066 CGprofile m_cg_fprofile;
00067
00068
00069
00070
00071 CGprogram m_raymarch_fprog;
00072
00073 CGparameter volume_texture, transfer_function;
00074
00075 CGparameter volume_texture_s1, volume_texture_s2, volume_texture_s3;
00076 CGparameter transfer_function_s1, transfer_function_s2, transfer_function_s3;
00077
00078
00079 float m_density, m_brightness;
00080
00081 };
00082
00083 #endif