glviewvol
annotate src/dicomview.cc @ 3:32c4a7160350
den kanei kryo stin ellada
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Sun, 28 Dec 2014 21:48:15 +0200 |
parents | cc9e0d8590e2 |
children | 04330eb80b36 |
rev | line source |
---|---|
nuclear@3 | 1 #include <stdio.h> |
nuclear@0 | 2 #include "opengl.h" |
nuclear@0 | 3 #include "dicomview.h" |
nuclear@1 | 4 #include "rend_fast.h" |
nuclear@3 | 5 #include "opt.h" |
nuclear@3 | 6 #include "volume.h" |
nuclear@0 | 7 |
nuclear@1 | 8 static int win_width, win_height; |
nuclear@0 | 9 static float cam_theta, cam_phi, cam_dist = 6; |
nuclear@0 | 10 |
nuclear@1 | 11 static Renderer *rend; |
nuclear@3 | 12 static Volume *vol; |
nuclear@1 | 13 |
nuclear@0 | 14 extern "C" { |
nuclear@0 | 15 |
nuclear@0 | 16 int init() |
nuclear@0 | 17 { |
nuclear@3 | 18 if(!opt.fname) { |
nuclear@3 | 19 fprintf(stderr, "you must specify the volume data filename\n"); |
nuclear@1 | 20 return -1; |
nuclear@1 | 21 } |
nuclear@1 | 22 |
nuclear@3 | 23 switch(opt.rend_type) { |
nuclear@3 | 24 case REND_FAST: |
nuclear@3 | 25 rend = new RendererFast; |
nuclear@3 | 26 break; |
nuclear@3 | 27 default: |
nuclear@3 | 28 return -1; |
nuclear@3 | 29 } |
nuclear@3 | 30 |
nuclear@3 | 31 if(!rend->init()) { |
nuclear@3 | 32 fprintf(stderr, "renderer initialization failed\n"); |
nuclear@3 | 33 return -1; |
nuclear@3 | 34 } |
nuclear@3 | 35 |
nuclear@3 | 36 VoxelVolume *voxvol = new VoxelVolume; |
nuclear@3 | 37 if(!voxvol->load(opt.fname)) { |
nuclear@3 | 38 fprintf(stderr, "failed to load volume data from: %s\n", opt.fname); |
nuclear@3 | 39 return -1; |
nuclear@3 | 40 } |
nuclear@3 | 41 vol = voxvol; |
nuclear@3 | 42 rend->set_volume(vol); |
nuclear@3 | 43 |
nuclear@1 | 44 return 0; |
nuclear@0 | 45 } |
nuclear@0 | 46 |
nuclear@0 | 47 void cleanup() |
nuclear@0 | 48 { |
nuclear@1 | 49 rend->destroy(); |
nuclear@1 | 50 delete rend; |
nuclear@3 | 51 delete vol; |
nuclear@0 | 52 } |
nuclear@0 | 53 |
nuclear@0 | 54 void ev_display() |
nuclear@0 | 55 { |
nuclear@0 | 56 glClear(GL_COLOR_BUFFER_BIT); |
nuclear@1 | 57 |
nuclear@1 | 58 rend->update(0); |
nuclear@1 | 59 rend->render(); |
nuclear@0 | 60 } |
nuclear@0 | 61 |
nuclear@0 | 62 void ev_reshape(int x, int y) |
nuclear@0 | 63 { |
nuclear@0 | 64 win_width = x; |
nuclear@0 | 65 win_height = y; |
nuclear@0 | 66 |
nuclear@1 | 67 glViewport(0, 0, x, y); |
nuclear@0 | 68 } |
nuclear@0 | 69 |
nuclear@1 | 70 void ev_keyboard(int key, int press, int x, int y) |
nuclear@1 | 71 { |
nuclear@1 | 72 if(press) { |
nuclear@1 | 73 switch(key) { |
nuclear@1 | 74 case 27: |
nuclear@1 | 75 quit(); |
nuclear@1 | 76 } |
nuclear@1 | 77 } |
nuclear@1 | 78 } |
nuclear@1 | 79 |
nuclear@1 | 80 void ev_mouse_button(int bn, int press, int x, int y) |
nuclear@1 | 81 { |
nuclear@1 | 82 } |
nuclear@1 | 83 |
nuclear@1 | 84 void ev_mouse_motion(int x, int y) |
nuclear@1 | 85 { |
nuclear@1 | 86 } |
nuclear@0 | 87 |
nuclear@0 | 88 } // extern "C" |