Changeset 580 for trunk/gui/vizservers/nanovis
- Timestamp:
- Feb 20, 2007, 4:15:00 PM (18 years ago)
- Location:
- trunk/gui/vizservers/nanovis
- Files:
-
- 37 added
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/gui/vizservers/nanovis/Camera.cpp
r431 r580 17 17 #include "Camera.h" 18 18 19 Camera::Camera(int w, int h,19 Camera::Camera(int startx, int starty, int w, int h, 20 20 double loc_x, double loc_y, double loc_z, 21 21 double target_x, double target_y, double target_z, 22 22 int angle_x, int angle_y, int angle_z): 23 startX(startx), 24 startY(starty), 23 25 width(w), 24 26 height(h), … … 46 48 void Camera::activate(){ 47 49 //fprintf(stderr, "camera: %d, %d\n", width, height); 48 glViewport( 0, 0, width, height);50 glViewport(startX, startY, width, height); 49 51 glMatrixMode(GL_PROJECTION); 50 52 glLoadIdentity(); 51 gluPerspective(30, (GLdouble) width/(GLdouble)height, 0.1, 50.0);53 gluPerspective(30, (GLdouble)(width - startX)/(GLdouble)(height - startY), 0.1, 50.0); 52 54 53 55 glMatrixMode(GL_MODELVIEW); … … 63 65 } 64 66 65 void Camera::set_screen_size(int w, int h){67 void Camera::set_screen_size(int sx, int sy, int w, int h){ 66 68 width = w; height = h; 69 startX = sx; startY = sy; 67 70 } -
trunk/gui/vizservers/nanovis/Camera.h
r423 r580 30 30 int width; //screen size 31 31 int height; //screen size 32 int startX; 33 int startY; 32 34 33 35 ~Camera(); 34 Camera(int w, int h,36 Camera(int startx, int starty, int w, int h, 35 37 double loc_x, double loc_y, double loc_z, 36 38 double target_x, double target_y, double target_z, … … 40 42 void rotate(double angle_x, double angle_y, double angle_z); //change target point 41 43 void activate();//make the camera setting active, this has to be called before drawing things. 42 void set_screen_size(int w, int h);44 void set_screen_size(int startx, int starty, int w, int h); 43 45 }; 44 46 -
trunk/gui/vizservers/nanovis/Volume.h
r524 r580 40 40 41 41 42 enum {CUBIC, ZINCBLENDE};42 enum {CUBIC, VOLQD, ZINCBLENDE}; 43 43 44 44 -
trunk/gui/vizservers/nanovis/VolumeRenderer.cpp
r524 r580 30 30 } 31 31 32 33 VolumeRenderer::~VolumeRenderer(){} 32 VolumeRenderer::~VolumeRenderer() 33 { 34 delete m_zincBlendeShader; 35 delete m_regularVolumeShader; 36 delete m_volQDVolumeShader; 37 } 34 38 35 39 //initialize the volume shaders … … 43 47 44 48 //volume rendering shader: one cubic volume 45 m_one_volume_fprog = loadProgram(g_context, CG_PROFILE_FP30, CG_SOURCE, "/opt/nanovis/lib/shaders/one_volume.cg"); 46 m_vol_one_volume_param = cgGetNamedParameter(m_one_volume_fprog, "volume"); 47 //cgGLSetTextureParameter(m_vol_one_volume_param, _vol->id); 48 m_tf_one_volume_param = cgGetNamedParameter(m_one_volume_fprog, "tf"); 49 //m_tf_cut_one_volume_param = cgGetNamedParameter(m_one_volume_fprog, "tf_cutplane"); 50 //cgGLSetTextureParameter(m_tf_one_volume_param, _tf->id); 51 m_mvi_one_volume_param = cgGetNamedParameter(m_one_volume_fprog, "modelViewInv"); 52 m_mv_one_volume_param = cgGetNamedParameter(m_one_volume_fprog, "modelView"); 53 m_render_param_one_volume_param = cgGetNamedParameter(m_one_volume_fprog, "renderParameters"); 54 55 49 m_regularVolumeShader = new NvRegularVolumeShader(); 56 50 57 51 //volume rendering shader: one zincblende orbital volume. … … 63 57 //The engine is already capable of rendering multiple volumes and combine them. Thus, we just invoke this shader on 64 58 //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 59 m_zincBlendeShader = new NvZincBlendeVolumeShader(); 60 61 m_volQDVolumeShader = new NvVolQDVolumeShader(); 75 62 } 76 63 … … 125 112 126 113 127 void VolumeRenderer::render_all(){ 114 void VolumeRenderer::render_all() 115 { 128 116 int total_rendered_slices = 0; 129 117 … … 239 227 240 228 ConvexPolygon static_poly; 241 for(int i=0; i<volume[volume_index]->get_cutplane_count(); i++){ 229 for(int i=0; i<volume[volume_index]->get_cutplane_count(); i++) 230 { 242 231 if(!volume[volume_index]->cutplane_is_enabled(i)) 243 232 continue; … … 692 681 { 693 682 //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, 707 volume[volume_index]->get_n_slice(), 708 volume[volume_index]->get_opacity_scale(), 709 volume[volume_index]->get_diffuse(), 710 volume[volume_index]->get_specular()); 711 else 712 cgGLSetParameter4f(m_render_param_one_volume_param, 713 0., 714 volume[volume_index]->get_opacity_scale(), 715 volume[volume_index]->get_diffuse(), 716 volume[volume_index]->get_specular()); 717 718 cgGLBindProgram(m_one_volume_fprog); 719 cgGLEnableProfile(CG_PROFILE_FP30); 683 m_regularVolumeShader->bind(tf[volume_index]->id, volume[volume_index], slice_mode); 720 684 } 721 685 722 686 else if (volume[volume_index]->volume_type == ZINCBLENDE) 723 687 { 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 } 753 } 754 755 756 void VolumeRenderer::deactivate_volume_shader(){ 688 m_zincBlendeShader->bind(tf[volume_index]->id, volume[volume_index], slice_mode); 689 } 690 else if (volume[volume_index]->volume_type == VOLQD) 691 { 692 m_volQDVolumeShader->bind(tf[volume_index]->id, volume[volume_index], slice_mode); 693 } 694 } 695 696 697 void VolumeRenderer::deactivate_volume_shader() 698 { 757 699 cgGLDisableProfile(CG_PROFILE_VP30); 758 cgGLDisableProfile(CG_PROFILE_FP30); 759 760 cgGLDisableTextureParameter(m_vol_one_volume_param); 761 cgGLDisableTextureParameter(m_tf_one_volume_param); 762 763 cgGLDisableTextureParameter(m_zincblende_volume_a_param); 764 cgGLDisableTextureParameter(m_zincblende_volume_b_param); 765 cgGLDisableTextureParameter(m_zincblende_tf_param); 700 701 m_regularVolumeShader->unbind(); 702 m_zincBlendeShader->unbind(); 766 703 } 767 704 -
trunk/gui/vizservers/nanovis/VolumeRenderer.h
r524 r580 34 34 #include "ZincBlendeVolume.h" 35 35 #include "PerfQuery.h" 36 #include "NvRegularVolumeShader.h" 37 #include "NvVolQDVolumeShader.h" 38 #include "NvZincBlendeVolumeShader.h" 36 39 37 40 using namespace std; 38 41 39 class VolumeRenderer {42 class VolumeRenderer { 40 43 41 44 private: … … 52 55 53 56 //shader parameters for rendering a single cubic volume 54 CGprogram m_one_volume_fprog; 55 CGparameter m_vol_one_volume_param; 56 CGparameter m_tf_one_volume_param; 57 CGparameter m_mvi_one_volume_param; 58 CGparameter m_mv_one_volume_param; 59 CGparameter m_render_param_one_volume_param; 57 NvRegularVolumeShader* m_regularVolumeShader; 58 NvVolQDVolumeShader* m_volQDVolumeShader; 60 59 61 60 … … 68 67 //S, P, D and SS orbitals with different transfor functions. The result is a multi-orbital rendering. 69 68 //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 69 NvZincBlendeVolumeShader* m_zincBlendeShader; 70 76 71 77 72 -
trunk/gui/vizservers/nanovis/ZincBlendeVolume.cpp
r524 r580 22 22 int w, int h, int d, float s, int n, 23 23 float* dataVolumeA, float* dataVolumeB, 24 double v0, double v1 )25 : Volume(x, y, z, w, h, d, s, n, dataVolumeA, v0, v1) 24 double v0, double v1, const Vector3& cellSize) 25 : Volume(x, y, z, w, h, d, s, n, dataVolumeA, v0, v1), cell_size(cellSize) 26 26 { 27 27 -
trunk/gui/vizservers/nanovis/ZincBlendeVolume.h
r524 r580 36 36 int width, int height, int depth, float size, int n_component, 37 37 float* dataVolumeA, float* dataVolumeB, 38 double vmin, double vmax );38 double vmin, double vmax, const Vector3& cellSize); 39 39 40 40 ~ZincBlendeVolume(); -
trunk/gui/vizservers/nanovis/nanovis.cpp
r524 r580 26 26 #include <fcntl.h> 27 27 28 #include "Nv.h" 29 28 30 #include "nanovis.h" 29 31 #include "RpField1D.h" … … 38 40 #include "transfer-function/ColorPaletteWindow.h" 39 41 #include "transfer-function/MainWindow.h" 42 #include "ZincBlendeVolume.h" 43 #include "NvLoadFile.h" 44 #include "NvVolQDVolume.h" 45 #include "NvColorTableRenderer.h" 46 47 // R2 headers 48 #include <R2/R2FilePath.h> 49 #include <R2/R2Fonts.h> 40 50 41 51 //render server … … 43 53 VolumeRenderer* vol_render; 44 54 PlaneRenderer* plane_render; 55 NvColorTableRenderer* color_table_renderer; 45 56 Camera* cam; 46 57 … … 90 101 91 102 int render_window; //the handle of the render window; 103 92 104 // forward declarations 93 105 void init_particles(); … … 100 112 void bmp_header_add_int(unsigned char* header, int& pos, int data); 101 113 void bmp_write(const char* cmd); 114 void bmp_write_to_file(); 115 void display(); 116 void read_screen(); 102 117 103 118 ParticleSystem* psys; … … 130 145 131 146 //Nvidia CG shaders and their parameters 132 CGcontext g_context; 147 //INSOO 148 //CGcontext g_context; 133 149 134 150 CGprogram m_passthru_fprog; 135 151 CGparameter m_passthru_scale_param, m_passthru_bias_param; 136 152 153 R2Fonts* g_fonts; 154 155 /* 137 156 CGprogram m_copy_texcoord_fprog; 138 139 157 CGprogram m_one_volume_fprog; 140 158 CGparameter m_vol_one_volume_param; … … 143 161 CGparameter m_mv_one_volume_param; 144 162 CGparameter m_render_param_one_volume_param; 145 163 */ 164 165 /* 146 166 CGprogram m_vert_std_vprog; 147 167 CGparameter m_mvp_vert_std_param; 148 168 CGparameter m_mvi_vert_std_param; 169 */ 149 170 150 171 using namespace std; … … 155 176 static Tcl_DString cmdbuffer; 156 177 178 static int ScreenShotCmd _ANSI_ARGS_((ClientData cdata, Tcl_Interp *interp, int argc, CONST84 char *argv[])); 157 179 static int CameraCmd _ANSI_ARGS_((ClientData cdata, Tcl_Interp *interp, int argc, CONST84 char *argv[])); 158 180 static int CutplaneCmd _ANSI_ARGS_((ClientData cdata, Tcl_Interp *interp, int argc, CONST84 char *argv[])); … … 257 279 "\": should be aim, angle, or zoom", (char*)NULL); 258 280 return TCL_ERROR; 281 } 282 283 /* 284 { 285 glEnable(GL_TEXTURE_2D); 286 glEnable(GL_BLEND); 287 288 glViewport(0, 0, 1024, 1024); 289 glMatrixMode(GL_PROJECTION); 290 glLoadIdentity(); 291 gluOrtho2D(0, render_width, 0, render_height); 292 glMatrixMode(GL_MODELVIEW); 293 glLoadIdentity(); 294 295 glBegin(GL_QUADS); 296 glTexCoord2f(0, 0); glVertex2f(30, 30); 297 glTexCoord2f(1, 0); glVertex2f(1024 - 60, 30); 298 glTexCoord2f(1, 1); glVertex2f(1024 - 60, 1024 - 60); 299 glTexCoord2f(0, 1); glVertex2f(30, 1024 - 60); 300 glEnd(); 301 } 302 */ 303 304 static int 305 ScreenShotCmd(ClientData cdata, Tcl_Interp *interp, int argc, CONST84 char *argv[]) 306 { 307 int old_win_width = win_width; 308 int old_win_height = win_height; 309 #ifdef XINETD 310 resize_offscreen_buffer(1024, 1024); 311 cam->set_screen_size(30, 90, 1024 - 60, 1024 - 120); 312 offscreen_buffer_capture(); //enable offscreen render 313 display(); 314 315 // TBD 316 Volume* vol = volume[0]; 317 TransferFunction* tf = vol_render->get_volume_shading(vol); 318 if (tf) 319 { 320 float data[512]; 321 for (int i=0; i < 256; i++) { 322 data[i] = data[i+256] = (float)(i/255.0); 323 } 324 Texture2D* plane = new Texture2D(256, 2, GL_FLOAT, GL_LINEAR, 1, data); 325 color_table_renderer->render(1024, 1024, plane, tf, vol->range_min(), vol->range_max()); 326 delete plane; 327 } 328 329 read_screen(); 330 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); 331 // INSOO 332 // TBD 333 bmp_write_to_file(); 334 //bmp_write("nv>screenshot -bytes"); 335 resize_offscreen_buffer(old_win_width, old_win_height); 336 #endif 337 338 339 return TCL_OK; 259 340 } 260 341 … … 415 496 plane_render->render(); 416 497 498 // INSOO 417 499 glReadPixels(0, 0, width, height, GL_RGB, GL_UNSIGNED_BYTE, screen_buffer); 500 //glReadPixels(0, 0, width, height, GL_BGR, GL_UNSIGNED_BYTE, screen_buffer); // INSOO's 418 501 419 502 std::ostringstream result; … … 568 651 } 569 652 653 //INSOO 654 FILE* f = fopen("/tmp/aa.cpp", "wt"); 655 fprintf(f, "float tfdata[] = {\n"); 656 fprintf(f, " "); 657 int num = nslots * 4; 658 for (i=0; i < num; i++) { 659 if (((i + 1) % 4) == 0) 660 { 661 fprintf(f, "\n "); 662 } 663 fprintf(f, "%f, ", data[i]); 664 } 665 fclose(f); 666 570 667 // find or create this transfer function 571 668 int newEntry; … … 584 681 return TCL_OK; 585 682 } 683 684 586 685 Tcl_AppendResult(interp, "bad option \"", argv[1], 587 686 "\": should be define", (char*)NULL); … … 640 739 * ---------------------------------------------------------------------- 641 740 */ 741 void NvLoadVolumeBinFile2(int index, char* filename); 642 742 static int 643 743 VolumeCmd(ClientData cdata, Tcl_Interp *interp, int argc, CONST84 char *argv[]) … … 985 1085 ++iter; 986 1086 } 1087 return TCL_OK; 1088 } 1089 else if (c == 'v' && strcmp(argv[1],"volqd") == 0) { 1090 int n = n_volumes; 1091 1092 NvLoadVolumeBinFile(n, "/home/nanohub/vrinside/grid_1_0"); 1093 1094 volume[n]->set_n_slice(256-n); 1095 volume[n]->disable_cutplane(0); 1096 volume[n]->disable_cutplane(1); 1097 volume[n]->disable_cutplane(2); 1098 vol_render->add_volume(volume[n], get_transfunc("default")); 1099 1100 return TCL_OK; 1101 } 1102 else if (c == 'z' && strcmp(argv[1],"zinc") == 0) { 1103 int n = n_volumes; 1104 1105 NvLoadVolumeBinFile2(n, "/home/nanohub/vrinside/grid_1_0"); 1106 1107 volume[n]->set_n_slice(256-n); 1108 volume[n]->disable_cutplane(0); 1109 volume[n]->disable_cutplane(1); 1110 volume[n]->disable_cutplane(2); 1111 vol_render->add_volume(volume[n], get_transfunc("default")); 1112 1113 return TCL_OK; 1114 } 1115 else if (c == 't' && strcmp(argv[1],"test2") == 0) { 1116 volume[1]->disable_data(); 1117 volume[1]->disable(); 987 1118 return TCL_OK; 988 1119 } … … 1810 1941 } 1811 1942 1943 //INSOO 1944 extern float tfdefaultdata[]; 1945 void load_volqd_volume(int index, int width, int height, int depth, 1946 int n_component, float* data, double vmin, double vmax, Vector3& cellSize) 1947 { 1948 while (n_volumes <= index) { 1949 volume.push_back(NULL); 1950 n_volumes++; 1951 } 1952 1953 if (volume[index] != NULL) { 1954 delete volume[index]; 1955 volume[index] = NULL; 1956 } 1957 1958 volume[index] = new NvVolQDVolume(0.f, 0.f, 0.f, width, height, depth, 1., 1959 n_component, data, vmin, vmax, cellSize); 1960 1961 float dx0 = -0.5; 1962 float dy0 = -0.5*height/width; 1963 float dz0 = -0.5*depth/width; 1964 volume[index]->move(Vector3(dx0, dy0, dz0)); 1965 1966 // INSOO 1967 // Tentatively 1968 TransferFunction* tf = new TransferFunction(256, tfdefaultdata); 1969 vol_render->shade_volume(volume[index], tf); 1970 } 1971 1972 // INSOO 1973 void load_zinc_volume(int index, int width, int height, int depth, 1974 int n_component, float* data, double vmin, double vmax, Vector3& cellSize) 1975 { 1976 while (n_volumes <= index) { 1977 volume.push_back(NULL); 1978 n_volumes++; 1979 } 1980 1981 if (volume[index] != NULL) { 1982 delete volume[index]; 1983 volume[index] = NULL; 1984 } 1985 1986 volume[index] = new ZincBlendeVolume(0.f, 0.f, 0.f, width, height, depth, 1., 1987 n_component, data, data, vmin, vmax, cellSize); 1988 1989 float dx0 = -0.5; 1990 float dy0 = -0.5*height/width; 1991 float dz0 = -0.5*depth/width; 1992 volume[index]->move(Vector3(dx0, dy0, dz0)); 1993 } 1812 1994 1813 1995 // get a colormap 1D texture by name … … 1852 2034 1853 2035 //initialize frame buffer objects for offscreen rendering 1854 void init_offscreen_buffer(){ 2036 void init_offscreen_buffer() 2037 { 1855 2038 1856 2039 //initialize final fbo for final display … … 1896 2079 1897 2080 //fprintf(stderr, "screen_buffer size: %d\n", sizeof(screen_buffer)); 2081 printf("screen_buffer size: %d %d\n", w, h); 1898 2082 1899 2083 if (screen_buffer) { … … 1901 2085 screen_buffer = NULL; 1902 2086 } 2087 1903 2088 screen_buffer = new unsigned char[4*win_width*win_height]; 1904 2089 assert(screen_buffer != NULL); … … 1914 2099 1915 2100 //change the camera setting 1916 cam->set_screen_size( win_width, win_height);2101 cam->set_screen_size(0, 0, win_width, win_height); 1917 2102 plane_render->set_screen_size(win_width, win_height); 1918 2103 … … 2062 2247 void initGL(void) 2063 2248 { 2064 system_info(); 2065 init_glew(); 2249 g_fonts = new R2Fonts(); 2250 g_fonts->addFont("verdana", "verdana.fnt"); 2251 g_fonts->setFont("verdana"); 2066 2252 2067 2253 //buffer to store data read from the screen … … 2074 2260 2075 2261 //create the camera with default setting 2076 cam = new Camera( win_width, win_height,2262 cam = new Camera(0, 0, win_width, win_height, 2077 2263 live_obj_x, live_obj_y, live_obj_z, 2078 2264 0., 0., 100., … … 2082 2268 glShadeModel(GL_FLAT); 2083 2269 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 2270 2084 2271 glClearColor(0,0,0,1); 2085 2272 glClear(GL_COLOR_BUFFER_BIT); … … 2118 2305 2119 2306 init_offscreen_buffer(); //frame buffer object for offscreen rendering 2120 init_cg(); //create cg shader context2121 2307 2122 2308 //create volume renderer and add volumes to it 2123 2309 vol_render = new VolumeRenderer(g_context); 2124 2310 2311 color_table_renderer = new NvColorTableRenderer(); 2312 color_table_renderer->setFonts(g_fonts); 2125 2313 2126 2314 /* … … 2187 2375 (ClientData)NULL, (Tcl_CmdDeleteProc*)NULL); 2188 2376 2377 // get screenshot 2378 Tcl_CreateCommand(interp, "screenshot", ScreenShotCmd, 2379 (ClientData)NULL, (Tcl_CmdDeleteProc*)NULL); 2380 2189 2381 // create a default transfer function 2190 2382 if (Tcl_Eval(interp, def_transfunc) != TCL_OK) { … … 2195 2387 2196 2388 2197 void read_screen(){ 2198 //glBindTexture(GL_TEXTURE_2D, 0); 2199 //glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, final_fbo); 2200 2389 void read_screen() 2390 { 2201 2391 glReadPixels(0, 0, win_width, win_height, GL_RGB, GL_UNSIGNED_BYTE, screen_buffer); 2202 2392 assert(glGetError()==0); … … 2253 2443 } 2254 2444 2445 // INSOO 2446 // FOR DEBUGGING 2255 2447 void 2256 bmp_write (const char* cmd)2448 bmp_write_to_file() 2257 2449 { 2258 2450 unsigned char header[54]; … … 2317 2509 } 2318 2510 2511 FILE* f; 2512 f = fopen("/tmp/image.bmp", "wb"); 2513 fwrite((void*) header, sizeof(header), 1, f); 2514 fwrite((void*) screen_buffer, (3*win_width+pad)*win_height, 1, f); 2515 fclose(f); 2516 } 2517 2518 void 2519 bmp_write(const char* cmd) 2520 { 2521 unsigned char header[54]; 2522 int pos = 0; 2523 header[pos++] = 'B'; 2524 header[pos++] = 'M'; 2525 2526 // BE CAREFUL: BMP files must have an even multiple of 4 bytes 2527 // on each scan line. If need be, we add padding to each line. 2528 int pad = 0; 2529 if ((3*win_width) % 4 > 0) { 2530 pad = 4 - ((3*win_width) % 4); 2531 } 2532 2533 // file size in bytes 2534 int fsize = (3*win_width+pad)*win_height + sizeof(header); 2535 bmp_header_add_int(header, pos, fsize); 2536 2537 // reserved value (must be 0) 2538 bmp_header_add_int(header, pos, 0); 2539 2540 // offset in bytes to start of bitmap data 2541 bmp_header_add_int(header, pos, sizeof(header)); 2542 2543 // size of the BITMAPINFOHEADER 2544 bmp_header_add_int(header, pos, 40); 2545 2546 // width of the image in pixels 2547 bmp_header_add_int(header, pos, win_width); 2548 2549 // height of the image in pixels 2550 bmp_header_add_int(header, pos, win_height); 2551 2552 // 1 plane + (24 bits/pixel << 16) 2553 bmp_header_add_int(header, pos, 1572865); 2554 2555 // no compression 2556 // size of image for compression 2557 bmp_header_add_int(header, pos, 0); 2558 bmp_header_add_int(header, pos, 0); 2559 2560 // x pixels per meter 2561 // y pixels per meter 2562 bmp_header_add_int(header, pos, 0); 2563 bmp_header_add_int(header, pos, 0); 2564 2565 // number of colors used (0 = compute from bits/pixel) 2566 // number of important colors (0 = all colors important) 2567 bmp_header_add_int(header, pos, 0); 2568 bmp_header_add_int(header, pos, 0); 2569 2570 // BE CAREFUL: BMP format wants BGR ordering for screen data 2571 unsigned char* scr = screen_buffer; 2572 for (int row=0; row < win_height; row++) { 2573 for (int col=0; col < win_width; col++) { 2574 unsigned char tmp = scr[2]; 2575 scr[2] = scr[0]; // B 2576 scr[0] = tmp; // R 2577 scr += 3; 2578 } 2579 scr += pad; // skip over padding already in screen data 2580 } 2581 2319 2582 std::ostringstream result; 2320 2583 result << cmd << " " << fsize << "\n"; … … 2323 2586 write(0, header, sizeof(header)); 2324 2587 write(0, screen_buffer, (3*win_width+pad)*win_height); 2588 2325 2589 } 2326 2590 … … 2390 2654 // Generate the latest frame and send it back to the client 2391 2655 // 2656 // INSOO 2657 offscreen_buffer_capture(); //enable offscreen render 2658 2392 2659 display(); 2660 2661 // INSOO 2662 #ifdef XINETD 2663 read_screen(); 2664 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); 2665 #else 2666 display_offscreen_buffer(); //display the final rendering on screen 2667 read_screen(); 2668 glutSwapBuffers(); 2669 #endif 2393 2670 2394 2671 #if DO_RLE … … 2430 2707 2431 2708 /*----------------------------------------------------*/ 2432 void idle(){ 2709 void idle() 2710 { 2433 2711 glutSetWindow(render_window); 2434 2712 … … 2450 2728 2451 2729 2452 void display_offscreen_buffer(){ 2730 void display_offscreen_buffer() 2731 { 2453 2732 glEnable(GL_TEXTURE_2D); 2454 2733 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); … … 2469 2748 glTexCoord2f(0, 1); glVertex2f(0, win_height); 2470 2749 glEnd(); 2471 } 2472 2473 void offscreen_buffer_capture(){ 2750 2751 } 2752 2753 void offscreen_buffer_capture() 2754 { 2474 2755 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, final_fbo); 2475 2756 } … … 2767 3048 2768 3049 2769 void draw_axis(){ 3050 void draw_axis() 3051 { 2770 3052 2771 3053 glDisable(GL_TEXTURE_2D); … … 2808 3090 //psys->advect(); //advect particles 2809 3091 2810 offscreen_buffer_capture(); //enable offscreen render 2811 // glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); //enable onscreen render3092 // INSOO 3093 //offscreen_buffer_capture(); //enable offscreen render 2812 3094 2813 3095 //start final rendering … … 2870 3152 glPopMatrix(); 2871 3153 } 2872 else {3154 else { 2873 3155 //2D rendering mode 2874 3156 perf->enable(); … … 2877 3159 } 2878 3160 2879 2880 3161 #ifdef XINETD 2881 3162 float cost = perf->get_pixel_count(); … … 2884 3165 perf->reset(); 2885 3166 2886 display_offscreen_buffer(); //display the final rendering on screen 2887 3167 /* 2888 3168 #ifdef XINETD 2889 read_screen(); 3169 read_screen(); 3170 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); 2890 3171 #else 2891 //read_screen(); 2892 #endif 2893 2894 glutSwapBuffers(); 3172 display_offscreen_buffer(); //display the final rendering on screen 3173 read_screen(); 3174 glutSwapBuffers(); 3175 #endif 3176 */ 2895 3177 } 2896 3178 … … 3089 3371 void init_service(){ 3090 3372 //open log and map stderr to log file 3091 xinetd_log = fopen(" log.txt", "w");3373 xinetd_log = fopen("/tmp/log.txt", "w"); 3092 3374 close(2); 3093 3375 dup2(fileno(xinetd_log), 2); … … 3140 3422 3141 3423 glutInitWindowSize(win_width, win_height); 3424 3142 3425 glutInitWindowPosition(10, 10); 3143 3426 render_window = glutCreateWindow(argv[0]); … … 3145 3428 3146 3429 #ifndef XINETD 3147 //MainTransferFunctionWindow * tf_window;3148 //tf_window = new MainTransferFunctionWindow();3149 //tf_window->mainInit();3150 3151 3430 glutMouseFunc(mouse); 3152 3431 glutMotionFunc(motion); 3153 3432 glutKeyboardFunc(keyboard); 3154 3433 #endif 3434 3155 3435 glutIdleFunc(idle); 3156 3436 glutReshapeFunc(resize_offscreen_buffer); 3157 3437 3438 NvInit(); 3439 3440 3158 3441 initGL(); 3159 3442 initTcl(); 3443 3444 3160 3445 3161 3446 #ifdef EVENTLOG … … 3169 3454 3170 3455 #ifdef XINETD 3171 end_service();3456 end_service(); 3172 3457 #endif 3173 3458 3174 return 0; 3175 } 3459 NvExit(); 3460 3461 return 0; 3462 } -
trunk/gui/vizservers/nanovis/shaders/zincblende_volume.cg
r524 r580 29 29 PixelOut OUT; 30 30 31 float4 tex_coord = mul(modelViewInv, IN.TexCoord) + float4(0.5, 0.5, 0.5, 0.5); 31 // INSOO 32 //float4 tex_coord = mul(modelViewInv, IN.TexCoord) + float4(0.5, 0.5, 0.5, 0.5); 33 float4 tex_coord = mul(modelViewInv, IN.TexCoord); 32 34 float4 twice_cell_size = cellSize * 2.0; 33 35 -
trunk/gui/vizservers/nanovis/start_server
r531 r580 11 11 export DISPLAY 12 12 13 PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin:/usr/bin/X11:/ opt/nanovis/bin13 PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin:/usr/bin/X11:/home/nanohub/vrinside/rappture/gui/vizservers 14 14 export PATH 15 15 16 LD_LIBRARY_PATH="/opt/render/lib:/lib:/usr/lib:/usr/local/lib"17 export LD_LIBRARY_PATH16 #LD_LIBRARY_PATH="/opt/render/lib:/lib:/usr/lib:/usr/local/lib" 17 #export LD_LIBRARY_PATH 18 18 19 exec / opt/nanovis/bin/nanoscale -l 4000 -b 4001 -s 172.18.3.255 -c /opt/nanovis/bin/nanovis> /dev/null 2>&119 exec /home/nanohub/vrinside/rappture/gui/vizservers/nanovis/nanoscale -l 2000 -b 2001 -s 128.210.189.255 -c "/home/nanohub/vrinside/rappture/gui/vizservers/nanovis/nanovis" > /dev/null 2>&1
Note: See TracChangeset
for help on using the changeset viewer.