Changeset 431


Ignore:
Timestamp:
May 4, 2006, 8:36:28 PM (18 years ago)
Author:
qiaow
Message:

Added 2D renderer.

Location:
trunk/gui/vizservers/nanovis
Files:
3 added
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/gui/vizservers/nanovis/Camera.cpp

    r426 r431  
    4949  glMatrixMode(GL_PROJECTION);
    5050  glLoadIdentity();
    51   gluPerspective(60, (GLdouble)width/(GLdouble)height, 0.1, 50.0);
     51  gluPerspective(30, (GLdouble)width/(GLdouble)height, 0.1, 50.0);
    5252
    5353  glMatrixMode(GL_MODELVIEW);
  • trunk/gui/vizservers/nanovis/Makefile

    r427 r431  
    33                PerfQuery.o TransferFunction.o ControlPoint.o ColorGradient.o ColorPaletteWindow.o\
    44                ColorGradientGLUTWindow.o TransferFunctionGLUTWindow.o MainWindow.o Event.o \
    5                 Lic.o Renderable.o Camera.o ScreenSnapper.o VolumeRenderer.o
     5                Lic.o Renderable.o Camera.o ScreenSnapper.o VolumeRenderer.o PlaneRenderer.o
    66OBJ_VOLUMERENDERER = Volume.o ConvexPolygon.o TransferFunction.o Mat4x4.o  Camera.o
    7 
     7OBJ_PLANERENDERER = Texture2D.o TransferFunction.o
    88OBJ_CLIENT = Socket.o ClientSocket.o RenderClient.o Event.o
    99
     
    1515NANOSCALESRC = ./nanoscale
    1616
    17 LIB_NANOVIS = -ltcl8.3 -L/opt/render/lib -lGL -lglut -lglui -lGLEW -lCg -lCgGL -pthread -lstdc++
     17LIB_NANOVIS = -ltcl8.4 -L/opt/render/lib -lGL -lglut -lglui -lGLEW -lCg -lCgGL -pthread -lstdc++
    1818LIB_CLIENT = -L/opt/render/lib -lGL -lglut -pthread -lstdc++
    19 INCLUDES = -I../../src2/core -I/opt/render/include -I/autohome/u76/qiaow/Cg/usr/include
     19INCLUDES = -I../src2/core -I/opt/render/include -I/autohome/u76/qiaow/Cg/usr/include
    2020CFLAG = -g -c $(INCLUDES)
    2121
     
    2626
    2727nanovis: $(OBJ_NANOVIS)
    28         gcc -g -o nanovis $(OBJ_NANOVIS) $(LIB_NANOVIS) ../../src2/core/*.o
     28        gcc -g -o nanovis $(OBJ_NANOVIS) $(LIB_NANOVIS) ../src2/core/*.o
    2929
    3030ColorGradient.o: Color.o $(TFSRC)/ColorGradient.cpp
     
    107107        gcc $(CFLAG) VolumeRenderer.cpp
    108108
     109PlaneRenderer.o: $(OBJ_PLANERENDERER)  PlaneRenderer.h PlaneRenderer.cpp
     110        gcc $(CFLAG) PlaneRenderer.cpp
     111
    109112Mat4x4.o: Mat4x4.cpp Mat4x4.h
    110113        gcc $(CFLAG) Mat4x4.cpp
  • trunk/gui/vizservers/nanovis/Texture2D.cpp

    r273 r431  
    2323Texture2D::Texture2D(){}
    2424
    25 Texture2D::Texture2D(int width, int height, GLuint type=GL_FLOAT, GLuint interp=GL_LINEAR, int n=4)
     25Texture2D::Texture2D(int width, int height, GLuint type=GL_FLOAT, GLuint interp=GL_LINEAR, int n=4, float* data = 0)
    2626{
    2727        assert(type == GL_UNSIGNED_BYTE || type == GL_FLOAT|| type ==GL_UNSIGNED_INT);
     
    3535
    3636        this->id = 0;
     37
     38        if(data != 0)
     39          initialize(data);
    3740}
    3841
  • trunk/gui/vizservers/nanovis/Texture2D.h

    r273 r431  
    3131
    3232  Texture2D();
    33   Texture2D(int width, int height, GLuint type, GLuint interp, int n);
     33  Texture2D(int width, int height, GLuint type, GLuint interp, int n, float* data);
    3434  ~Texture2D();
    3535       
  • trunk/gui/vizservers/nanovis/Volume.cpp

    r423 r431  
    100100int Volume::get_n_slice() { return n_slice; }
    101101
     102void Volume::set_size(float s) {
     103  size = s;
     104  aspect_ratio_width = s*tex->aspect_ratio_width;
     105  aspect_ratio_height = s*tex->aspect_ratio_height;
     106  aspect_ratio_depth = s*tex->aspect_ratio_depth;
     107}
     108
    102109float Volume::get_specular() { return specular; }
    103110float Volume::get_diffuse() { return diffuse; }
  • trunk/gui/vizservers/nanovis/Volume.h

    r423 r431  
    8383        int get_n_slice();      //return number of slices
    8484
     85        void set_size(float s); //set the drawing size of volume
     86
    8587        //methods related to cutplanes
    8688        int add_cutplane(int _orientation, float _location); //add a plane and returns its index
  • trunk/gui/vizservers/nanovis/VolumeRenderer.cpp

    r423 r431  
    4545  //cgGLSetTextureParameter(m_vol_one_volume_param, _vol->id);
    4646  m_tf_one_volume_param = cgGetNamedParameter(m_one_volume_fprog, "tf");
     47  //m_tf_cut_one_volume_param = cgGetNamedParameter(m_one_volume_fprog, "tf_cutplane");
    4748  //cgGLSetTextureParameter(m_tf_one_volume_param, _tf->id);
    4849  m_mvi_one_volume_param = cgGetNamedParameter(m_one_volume_fprog, "modelViewInv");
     
    630631  cgGLSetTextureParameter(m_vol_one_volume_param, volume[volume_index]->id);
    631632  cgGLSetTextureParameter(m_tf_one_volume_param, tf[volume_index]->id);
     633  //cgGLSetTextureParameter(m_tf_cut_one_volume_param, tf_cut[volume_index]->id);
    632634  cgGLEnableTextureParameter(m_vol_one_volume_param);
    633635  cgGLEnableTextureParameter(m_tf_one_volume_param);
     636  //cgGLEnableTextureParameter(m_tf_cut_one_volume_param);
    634637
    635638  if(!slice_mode)
  • trunk/gui/vizservers/nanovis/config.h

    r427 r431  
    1616
    1717#define NV40      //Uncomment if using 6 series card. By default we assume older card the 5xxx series
    18 #define XINETD  //enable render server
     18//#define XINETD  //enable render server
    1919//#define EVENTLOG  //enable event logging
    2020//#define DO_RLE  //do run length compression
  • trunk/gui/vizservers/nanovis/nanovis.cpp

    r427 r431  
    3838
    3939VolumeRenderer* vol_render;
     40PlaneRenderer* plane_render;
    4041Camera* cam;
     42
     43bool volume_mode = false; //if true nanovis renders volumes in 3D, if not renders 2D plane
    4144
    4245// color table for built-in transfer function editor
     
    8386
    8487int n_volumes = 0;
    85 Volume* volume[MAX_N_VOLUMES];          //point to volumes, currently handle up to 10 volumes
     88Volume* volume[MAX_N_VOLUMES];          //pointers to volumes, currently handle up to 10 volumes
    8689TransferFunction* tf[MAX_N_VOLUMES];    //transfer functions, currently handle up to 10 colormaps
     90Texture2D* plane[10];                   //pointers to 2D planes, currently handle up 10
    8791
    8892PerfQuery* perf;                        //perfromance counter
     
    254258
    255259        int axis;
    256         if (DecodeAxis(interp, argv[3], &axis) != TCL_OK) {
     260        if (DecodeAxis(interp, (char*)argv[3], &axis) != TCL_OK) {
    257261            return TCL_ERROR;
    258262        }
     
    299303
    300304        int axis;
    301         if (DecodeAxis(interp, argv[3], &axis) != TCL_OK) {
     305        if (DecodeAxis(interp, (char*)argv[3], &axis) != TCL_OK) {
    302306            return TCL_ERROR;
    303307        }
     
    381385        }
    382386
    383         resize_offscreen_buffer(w, h);
     387        resize_offscreen_buffer((int)w, (int)h);
    384388fprintf(stdin,"new screen size: %d %d\n",w,h);
    385389        return TCL_OK;
     
    488492}
    489493
     494
     495static int
     496VolumeResizeCmd(ClientData cdata, Tcl_Interp *interp, int argc, CONST84 char *argv[])
     497{
     498  fprintf(stderr, "resize drawing size of the volume command\n");
     499
     500  double volume_index, size;
     501
     502  if (argc != 3) {
     503    Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
     504                " volume_index size \"", (char*)NULL);
     505    return TCL_ERROR;
     506  }
     507  if (Tcl_GetDouble(interp, argv[1], &volume_index) != TCL_OK) {
     508        return TCL_ERROR;
     509  }
     510  if (Tcl_GetDouble(interp, argv[2], &size) != TCL_OK) {
     511        return TCL_ERROR;
     512  }
     513
     514  volume[(int)volume_index]->set_size((float) size);
     515  return TCL_OK;
     516}
    490517
    491518static int
     
    11431170  win_height = h;
    11441171
     1172  //fprintf(stderr, "screen_buffer size: %d\n", sizeof(screen_buffer));
     1173
    11451174  if (screen_buffer) {
    11461175      delete[] screen_buffer;
    1147   }
    1148   screen_buffer = new unsigned char[3*win_width*win_height+1];
     1176      screen_buffer = 0;
     1177  }
     1178  screen_buffer = new unsigned char[5*win_width*win_height];
     1179  assert(screen_buffer!=0);
    11491180
    11501181  //delete the current render buffer resources
     
    12881319
    12891320
     1321void make_test_2D_data(){
     1322
     1323  int w = 300;
     1324  int h = 200;
     1325  float* data = new float[w*h];
     1326
     1327  //procedurally make a gradient plane
     1328  for(int j=0; j<h; j++){
     1329    for(int i=0; i<w; i++){
     1330      data[w*j+i] = float(i)/float(w);
     1331    }
     1332  }
     1333
     1334  plane[0] = new Texture2D(w, h, GL_FLOAT, GL_LINEAR, 1, data);
     1335
     1336  delete[] data;
     1337}
     1338
     1339
    12901340/*----------------------------------------------------*/
    12911341void initGL(void)
     
    12971347   if (screen_buffer) {
    12981348       delete[] screen_buffer;
     1349       screen_buffer = 0;
    12991350   }
    1300    screen_buffer = new unsigned char[3*win_width*win_height+1];
     1351   screen_buffer = new unsigned char[5*win_width*win_height];
     1352   assert(screen_buffer!=0);
    13011353
    13021354   //create the camera with default setting
     
    13441396   //load_volume_file(0, "./data/input_nd_dx_4"); //take a VERY long time?
    13451397   //load_vector_file(1, "./data/J-wire-vec.dx");
    1346    load_volume_file(1, "./data/mu-wire-3d.dx");
     1398   //load_volume_file(1, "./data/mu-wire-3d.dx");
    13471399   //load_volume_file(3, "./data/mu-wire-3d.dx");
    13481400   //load_volume_file(4, "./data/mu-wire-3d.dx");
     
    13681420   //vol_render->add_volume(volume[4], tf[0]);
    13691421
     1422
     1423   //create an 2D plane renderer
     1424   plane_render = new PlaneRenderer(g_context, win_width, win_height);
     1425   make_test_2D_data();
     1426
     1427   plane_render->add_plane(plane[0], tf[0]);
     1428
     1429   
    13701430   //init_particle_system();
    13711431   //init_lic();
     
    14001460  //enable or disable an existing volume
    14011461  Tcl_CreateCommand(interp, "volume_enable", VolumeEnableCmd, (ClientData)0, (Tcl_CmdDeleteProc*)NULL);
     1462  //resize volume
     1463  Tcl_CreateCommand(interp, "volume_resize", VolumeResizeCmd, (ClientData)0, (Tcl_CmdDeleteProc*)NULL);
    14021464
    14031465  //refresh the screen (render again)
     
    14091471  //glBindTexture(GL_TEXTURE_2D, 0);
    14101472  //glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, final_fbo);
    1411   glReadPixels(0, 0, win_width, win_height, GL_RGB, GL_UNSIGNED_BYTE, screen_buffer);
     1473 
     1474  //debug: set magic number
     1475  memset(screen_buffer, 253, 5*win_width*win_height);
     1476
     1477  glReadPixels(0, 0, win_width, win_height, GL_RGBA, GL_UNSIGNED_BYTE, screen_buffer);
     1478  //glReadPixels(0, 0, win_width, win_height, GL_RGB, GL_UNSIGNED_BYTE, screen_buffer);
    14121479  assert(glGetError()==0);
     1480 
     1481  fprintf(stderr, "%d %d:", win_width, win_height);
     1482  for(int i=5*win_width*win_height-1; i>=0; i--){
     1483    if(screen_buffer[i] != 253){
     1484      fprintf(stderr, "%d\n", i);
     1485      i=0;
     1486      //fprintf(stderr, "%d ", screen_buffer[i]);
     1487    }
     1488  }
    14131489 
    14141490  /*
     
    14701546
    14711547void xinetd_listen(){
    1472     //command:
    1473     // 0. load data
    1474     // 1. flip on/off screen
    1475     // 2. rotation
    1476     // 3. zoom
    1477     // 4. more slices
    1478     // 5. less sleces
    14791548
    14801549    std::string data;
     
    19602029   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //clear screen
    19612030
    1962    glEnable(GL_TEXTURE_2D);
    1963    glEnable(GL_DEPTH_TEST);
    1964 
    1965    //camera setting activated
    1966    cam->activate();
    1967 
    1968    //now render things in the scene
    1969    //
    1970    draw_3d_axis();
     2031   if( volume_mode){ //3D rendering mode
     2032     glEnable(GL_TEXTURE_2D);
     2033     glEnable(GL_DEPTH_TEST);
     2034
     2035     //camera setting activated
     2036     cam->activate();
     2037
     2038     //now render things in the scene
     2039     //
     2040     draw_3d_axis();
    19712041   
    1972    //lic->render();     //display the line integral convolution result
    1973    //soft_display_verts();
    1974    //perf->enable();
    1975    //  psys->render();
    1976    //perf->disable();
    1977    //fprintf(stderr, "particle pixels: %d\n", perf->get_pixel_count());
    1978    //perf->reset();
    1979 
    1980 
    1981    perf->enable();
    1982      vol_render->render_all();
    1983      //fprintf(stderr, "%lf\n", get_time_interval());
    1984    perf->disable();
    1985  
     2042     //lic->render();   //display the line integral convolution result
     2043     //soft_display_verts();
     2044     //perf->enable();
     2045     //  psys->render();
     2046     //perf->disable();
     2047     //fprintf(stderr, "particle pixels: %d\n", perf->get_pixel_count());
     2048     //perf->reset();
     2049   
     2050     perf->enable();
     2051       vol_render->render_all();
     2052       //fprintf(stderr, "%lf\n", get_time_interval());
     2053     perf->disable();
     2054   }
     2055   else{ //2D rendering mode
     2056
     2057     perf->enable();
     2058       plane_render->render();
     2059     perf->disable();
     2060   }
     2061
     2062
    19862063#ifdef XINETD
    19872064   float cost  = perf->get_pixel_count();
     
    19952072   read_screen();
    19962073#else
    1997    //read_screen();
     2074   read_screen();
    19982075#endif   
    19992076
  • trunk/gui/vizservers/nanovis/nanovis.h

    r406 r431  
    4141#include "Lic.h"
    4242#include "VolumeRenderer.h"
     43#include "PlaneRenderer.h"
    4344
    4445#include "config.h"
Note: See TracChangeset for help on using the changeset viewer.