- Timestamp:
- Sep 17, 2006, 4:14:04 PM (18 years ago)
- Location:
- trunk/gui/vizservers/nanovis
- Files:
-
- 3 added
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/gui/vizservers/nanovis/Makefile
r467 r524 1 1 OBJ_NANOVIS = nanovis.o Socket.o RenderVertexArray.o Plane.o ConvexPolygon.o Vector4.o Vector3.o Mat4x4.o \ 2 Texture1D.o Texture3D.o Volume.o Texture2D.o ParticleSystem.o Sphere.o Color.o \2 Texture1D.o Texture3D.o Volume.o ZincBlendeVolume.o Texture2D.o ParticleSystem.o Sphere.o Color.o \ 3 3 PerfQuery.o TransferFunction.o ControlPoint.o ColorGradient.o ColorPaletteWindow.o\ 4 4 ColorGradientGLUTWindow.o TransferFunctionGLUTWindow.o MainWindow.o Event.o \ … … 16 16 INSTALL_DIR = /opt/nanovis 17 17 18 LIB_NANOVIS = -ltcl8. 3-L/opt/render/lib -lGL -lglut -lglui -lGLEW -lCg -lCgGL -pthread -lstdc++18 LIB_NANOVIS = -ltcl8.4 -L/opt/render/lib -lGL -lglut -lglui -lGLEW -lCg -lCgGL -pthread -lstdc++ 19 19 LIB_CLIENT = -L/opt/render/lib -lGL -lglut -pthread -lstdc++ 20 20 INCLUDES = -I../../src2/core -I/opt/render/include -I/autohome/u76/qiaow/Cg/usr/include … … 108 108 gcc $(CFLAG) Volume.cpp 109 109 110 ZincBlendeVolume.o: Volume.o ZincBlendeVolume.cpp ZincBlendeVolume.h $(AUXSRC) 111 gcc $(CFLAG) ZincBlendeVolume.cpp 112 110 113 VolumeRenderer.o: $(OBJ_VOLUMERENDERER) VolumeRenderer.h VolumeRenderer.cpp 111 114 gcc $(CFLAG) VolumeRenderer.cpp -
trunk/gui/vizservers/nanovis/Volume.cpp
r455 r524 35 35 data_enabled(true), // default value 36 36 outline_enabled(true), // default value 37 outline_color(1.,1.,1.) // default value 37 outline_color(1.,1.,1.), // default value 38 volume_type(CUBIC) //by default, is a cubic volume 38 39 { 39 40 -
trunk/gui/vizservers/nanovis/Volume.h
r455 r524 39 39 40 40 41 42 enum {CUBIC, ZINCBLENDE}; 43 44 41 45 class Volume{ 42 46 43 private: 47 48 public: 49 int volume_type; //cubic or zincblende 50 44 51 vector <CutPlane> plane; //cut planes 45 52 int n_components; 46 53 47 54 Texture3D* tex; //OpenGL texture storing the volume 48 double vmin; //minimum (unscaled) value in data49 double vmax; //maximum (unscaled) value in data55 double vmin; //minimum (unscaled) value in data 56 double vmax; //maximum (unscaled) value in data 50 57 51 58 float specular; //specular lighting parameter … … 60 67 61 68 62 public: 69 63 70 Vector3 location; 64 71 -
trunk/gui/vizservers/nanovis/VolumeRenderer.cpp
r467 r524 41 41 m_mvi_vert_std_param = cgGetNamedParameter(m_vert_std_vprog, "modelViewInv"); 42 42 43 //volume rendering shader 43 44 //volume rendering shader: one cubic volume 44 45 m_one_volume_fprog = loadProgram(g_context, CG_PROFILE_FP30, CG_SOURCE, "/opt/nanovis/lib/shaders/one_volume.cg"); 45 46 m_vol_one_volume_param = cgGetNamedParameter(m_one_volume_fprog, "volume"); … … 51 52 m_mv_one_volume_param = cgGetNamedParameter(m_one_volume_fprog, "modelView"); 52 53 m_render_param_one_volume_param = cgGetNamedParameter(m_one_volume_fprog, "renderParameters"); 54 55 56 57 //volume rendering shader: one zincblende orbital volume. 58 //This shader renders one orbital of the simulation. 59 //A sim has S, P, D, SS orbitals. thus a full rendering requires 4 zincblende orbital volumes. 60 //A zincblende orbital volume is decomposed into 2 "interlocking" cubic 4-component volumes and passed to the shader. 61 //We render each orbital with a independent transfer functions then blend the result. 62 // 63 //The engine is already capable of rendering multiple volumes and combine them. Thus, we just invoke this shader on 64 //S, P, D and SS orbitals with different transfor functions. The result is a multi-orbital rendering. 65 m_zincblende_volume_fprog = loadProgram(g_context, CG_PROFILE_FP30, CG_SOURCE, 66 "/opt/nanovis/lib/shaders/zincblende_volume.cg"); 67 68 m_zincblende_tf_param = cgGetNamedParameter(m_zincblende_volume_fprog, "tf"); 69 m_zincblende_volume_a_param = cgGetNamedParameter(m_zincblende_volume_fprog, "volumeA"); 70 m_zincblende_volume_b_param = cgGetNamedParameter(m_zincblende_volume_fprog, "volumeB"); 71 m_zincblende_cell_size_param = cgGetNamedParameter(m_zincblende_volume_fprog, "cellSize"); 72 m_zincblende_mvi_param = cgGetNamedParameter(m_zincblende_volume_fprog, "modelViewInv"); 73 m_zincblende_render_param = cgGetNamedParameter(m_zincblende_volume_fprog, "renderParameters"); 74 53 75 } 54 76 … … 660 682 void VolumeRenderer::activate_volume_shader(int volume_index, bool slice_mode){ 661 683 684 //vertex shader 662 685 cgGLSetStateMatrixParameter(m_mvp_vert_std_param, CG_GL_MODELVIEW_PROJECTION_MATRIX, CG_GL_MATRIX_IDENTITY); 663 686 cgGLSetStateMatrixParameter(m_mvi_vert_std_param, CG_GL_MODELVIEW_MATRIX, CG_GL_MATRIX_INVERSE); … … 665 688 cgGLEnableProfile(CG_PROFILE_VP30); 666 689 667 cgGLSetStateMatrixParameter(m_mvi_one_volume_param, CG_GL_MODELVIEW_MATRIX, CG_GL_MATRIX_INVERSE); 668 cgGLSetStateMatrixParameter(m_mv_one_volume_param, CG_GL_MODELVIEW_MATRIX, CG_GL_MATRIX_IDENTITY); 669 cgGLSetTextureParameter(m_vol_one_volume_param, volume[volume_index]->id); 670 cgGLSetTextureParameter(m_tf_one_volume_param, tf[volume_index]->id); 671 //cgGLSetTextureParameter(m_tf_cut_one_volume_param, tf_cut[volume_index]->id); 672 cgGLEnableTextureParameter(m_vol_one_volume_param); 673 cgGLEnableTextureParameter(m_tf_one_volume_param); 674 //cgGLEnableTextureParameter(m_tf_cut_one_volume_param); 675 676 if(!slice_mode) 677 cgGLSetParameter4f(m_render_param_one_volume_param, 690 691 if (volume[volume_index]->volume_type == CUBIC) 692 { 693 //regular cubic volume 694 // 695 696 cgGLSetStateMatrixParameter(m_mvi_one_volume_param, CG_GL_MODELVIEW_MATRIX, CG_GL_MATRIX_INVERSE); 697 cgGLSetStateMatrixParameter(m_mv_one_volume_param, CG_GL_MODELVIEW_MATRIX, CG_GL_MATRIX_IDENTITY); 698 cgGLSetTextureParameter(m_vol_one_volume_param, volume[volume_index]->id); 699 cgGLSetTextureParameter(m_tf_one_volume_param, tf[volume_index]->id); 700 //cgGLSetTextureParameter(m_tf_cut_one_volume_param, tf_cut[volume_index]->id); 701 cgGLEnableTextureParameter(m_vol_one_volume_param); 702 cgGLEnableTextureParameter(m_tf_one_volume_param); 703 //cgGLEnableTextureParameter(m_tf_cut_one_volume_param); 704 705 if(!slice_mode) 706 cgGLSetParameter4f(m_render_param_one_volume_param, 678 707 volume[volume_index]->get_n_slice(), 679 708 volume[volume_index]->get_opacity_scale(), 680 709 volume[volume_index]->get_diffuse(), 681 710 volume[volume_index]->get_specular()); 682 else683 cgGLSetParameter4f(m_render_param_one_volume_param,711 else 712 cgGLSetParameter4f(m_render_param_one_volume_param, 684 713 0., 685 714 volume[volume_index]->get_opacity_scale(), … … 687 716 volume[volume_index]->get_specular()); 688 717 689 cgGLBindProgram(m_one_volume_fprog); 690 cgGLEnableProfile(CG_PROFILE_FP30); 718 cgGLBindProgram(m_one_volume_fprog); 719 cgGLEnableProfile(CG_PROFILE_FP30); 720 } 721 722 else if (volume[volume_index]->volume_type == ZINCBLENDE) 723 { 724 //zinc blende volume 725 ZincBlendeVolume* vol = (ZincBlendeVolume*) volume[volume_index]; 726 727 cgGLSetStateMatrixParameter(m_zincblende_mvi_param, CG_GL_MODELVIEW_MATRIX, CG_GL_MATRIX_INVERSE); 728 cgGLSetTextureParameter(m_zincblende_tf_param, tf[volume_index]->id); 729 cgGLSetParameter4f(m_zincblende_cell_size_param, vol->cell_size.x, vol->cell_size.y, vol->cell_size.z, 0.); 730 731 cgGLSetTextureParameter(m_zincblende_volume_a_param, vol->zincblende_tex[0]->id); 732 cgGLSetTextureParameter(m_zincblende_volume_b_param, vol->zincblende_tex[1]->id); 733 cgGLEnableTextureParameter(m_zincblende_volume_a_param); 734 cgGLEnableTextureParameter(m_zincblende_volume_b_param); 735 736 if(!slice_mode) 737 cgGLSetParameter4f(m_zincblende_render_param, 738 vol->get_n_slice(), 739 vol->get_opacity_scale(), 740 vol->get_diffuse(), 741 vol->get_specular()); 742 else 743 cgGLSetParameter4f(m_zincblende_render_param, 744 0., 745 vol->get_opacity_scale(), 746 vol->get_diffuse(), 747 vol->get_specular()); 748 749 cgGLBindProgram(m_zincblende_volume_fprog); 750 cgGLEnableProfile(CG_PROFILE_FP30); 751 752 } 691 753 } 692 754 … … 698 760 cgGLDisableTextureParameter(m_vol_one_volume_param); 699 761 cgGLDisableTextureParameter(m_tf_one_volume_param); 700 } 762 763 cgGLDisableTextureParameter(m_zincblende_volume_a_param); 764 cgGLDisableTextureParameter(m_zincblende_volume_b_param); 765 cgGLDisableTextureParameter(m_zincblende_tf_param); 766 } 767 701 768 702 769 void VolumeRenderer::get_near_far_z(Mat4x4 mv, double &zNear, double &zFar) -
trunk/gui/vizservers/nanovis/VolumeRenderer.h
r455 r524 32 32 #include "Mat4x4.h" 33 33 #include "Volume.h" 34 #include "ZincBlendeVolume.h" 34 35 #include "PerfQuery.h" 35 36 … … 48 49 49 50 //cg related 50 CGcontext g_context; //the Nvidia cg context 51 CGcontext g_context; //the Nvidia cg context 52 53 //shader parameters for rendering a single cubic volume 51 54 CGprogram m_one_volume_fprog; 52 55 CGparameter m_vol_one_volume_param; … … 56 59 CGparameter m_render_param_one_volume_param; 57 60 61 62 //Shader parameters for rendering a single zincblende orbital. 63 //A simulation contains S, P, D and SS, total of 4 orbitals. A full rendering requires 4 zincblende orbital volumes. 64 //A zincblende orbital volume is decomposed into two "interlocking" cubic volumes and passed to the shader. 65 //We render each orbital with its own independent transfer functions then blend the result. 66 // 67 //The engine is already capable of rendering multiple volumes and combine them. Thus, we just invoke this shader on 68 //S, P, D and SS orbitals with different transfor functions. The result is a multi-orbital rendering. 69 //This is equivalent to rendering 4 unrelated data sets occupying the same space. 70 CGprogram m_zincblende_volume_fprog; 71 CGparameter m_zincblende_tf_param; //four transfer functions 72 CGparameter m_zincblende_volume_a_param, m_zincblende_volume_b_param; //two cubic volumes (one zincblende orbital) 73 CGparameter m_zincblende_cell_size_param; //cell size in texture space 74 CGparameter m_zincblende_mvi_param; //modelview inverse matrix 75 CGparameter m_zincblende_render_param; //render parameters 76 77 78 //standard vertex shader parameters 58 79 CGprogram m_vert_std_vprog; 59 80 CGparameter m_mvp_vert_std_param; -
trunk/gui/vizservers/nanovis/nanovis.cpp
r514 r524 494 494 char **cmapv, **wmapv; 495 495 496 if (Tcl_SplitList(interp, argv[3], &cmapc, &cmapv) != TCL_OK) {496 if (Tcl_SplitList(interp, argv[3], &cmapc, (const char***)&cmapv) != TCL_OK) { 497 497 return TCL_ERROR; 498 498 } … … 504 504 } 505 505 506 if (Tcl_SplitList(interp, argv[4], &wmapc, &wmapv) != TCL_OK) {506 if (Tcl_SplitList(interp, argv[4], &wmapc, (const char***)&wmapv) != TCL_OK) { 507 507 return TCL_ERROR; 508 508 } … … 608 608 609 609 int sign = 1; 610 char *axisName = argv[1];610 char *axisName = (char*)argv[1]; 611 611 if (*axisName == '-') { 612 612 sign = -1; … … 665 665 666 666 int axis; 667 if (GetAxis(interp, argv[3], &axis) != TCL_OK) {667 if (GetAxis(interp, (char*)argv[3], &axis) != TCL_OK) { 668 668 return TCL_ERROR; 669 669 } … … 676 676 vector<int>::iterator iter = ivol.begin(); 677 677 while (iter != ivol.end()) { 678 volume[*iter]->set_label(axis, argv[4]);678 volume[*iter]->set_label(axis, (char*)argv[4]); 679 679 ++iter; 680 680 } … … 864 864 } 865 865 866 TransferFunction *tf = get_transfunc( argv[3]);866 TransferFunction *tf = get_transfunc((char*)argv[3]); 867 867 if (tf == NULL) { 868 868 Tcl_AppendResult(interp, "transfer function \"", argv[3], … … 1080 1080 int rgbc; 1081 1081 char **rgbv; 1082 if (Tcl_SplitList(interp, str, &rgbc, &rgbv) != TCL_OK) {1082 if (Tcl_SplitList(interp, str, &rgbc, (const char***)&rgbv) != TCL_OK) { 1083 1083 return TCL_ERROR; 1084 1084 } -
trunk/gui/vizservers/nanovis/shaders/one_volume.cg
r451 r524 18 18 19 19 20 PixelOut main(v2f IN, /* uniform sampler1D tf,*/20 PixelOut main(v2f IN, 21 21 uniform sampler3D volume, 22 22 uniform sampler1D tf,
Note: See TracChangeset
for help on using the changeset viewer.