Commit 4d23da9ca2b95fdebeabba2152faccd0025b6d78
1 parent
5c83f00e
add 00_GT.swc,now everything is good
Showing
2 changed files
with
86 additions
and
42 deletions
Show diff stats
data/00_GT.swc
1 | +# converted from 00_GT.obj | ||
2 | +1 1 99 677 0 0.5 -1 | ||
3 | +2 1 88 563 0 0.5 1 | ||
4 | +3 1 229 510 0 0.5 2 | ||
5 | +4 1 181 372 0 0.5 3 | ||
6 | +5 1 57 347 0 0.5 4 | ||
7 | +6 1 316 596 0 0.5 3 | ||
8 | +7 1 344 724 0 0.5 6 | ||
9 | +8 1 385 425 0 0.5 3 | ||
10 | +9 1 581 361 0 0.5 8 | ||
11 | +10 1 574 223 0 0.5 9 | ||
12 | +11 1 481 165 0 0.5 10 | ||
13 | +12 1 341 199 0 0.5 11 | ||
14 | +13 1 757 377 0 0.5 9 | ||
15 | +14 1 818 229 0 0.5 13 | ||
16 | +15 1 981 152 0 0.5 14 | ||
17 | +16 1 793 508 0 0.5 13 | ||
18 | +17 1 941 600 0 0.5 16 | ||
19 | +18 1 679 601 0 0.5 16 | ||
20 | +19 1 647 738 0 0.5 18 |
main.cu
@@ -47,7 +47,8 @@ std::vector<unsigned> _t_gt; // store indices of nearest edge points in _ | @@ -47,7 +47,8 @@ std::vector<unsigned> _t_gt; // store indices of nearest edge points in _ | ||
47 | float resample_rate = 0.5f; //sample rate for the network (fraction of sigma used as the maximum sample rate) | 47 | float resample_rate = 0.5f; //sample rate for the network (fraction of sigma used as the maximum sample rate) |
48 | float camera_factor = 1.2f; //start point of the camera as a function of X and Y size | 48 | float camera_factor = 1.2f; //start point of the camera as a function of X and Y size |
49 | float orbit_factor = 0.01f; //degrees per pixel used to orbit the camera | 49 | float orbit_factor = 0.01f; //degrees per pixel used to orbit the camera |
50 | -float zoom_factor = 10.0; | 50 | +float zoom_factor = 10.0f; |
51 | +float radius_factor = 0.5f; | ||
51 | 52 | ||
52 | //mouse click | 53 | //mouse click |
53 | bool LButtonDown = false; // true when left button down | 54 | bool LButtonDown = false; // true when left button down |
@@ -74,7 +75,9 @@ GLuint dlist2; | @@ -74,7 +75,9 @@ GLuint dlist2; | ||
74 | //OpenGL objects | 75 | //OpenGL objects |
75 | GLuint cmap_tex = 0; //texture name for the color map | 76 | GLuint cmap_tex = 0; //texture name for the color map |
76 | 77 | ||
78 | +float delta; | ||
77 | float sigma = 3; //default sigma | 79 | float sigma = 3; //default sigma |
80 | +float radius = 3; //equals to radius | ||
78 | 81 | ||
79 | //sets an OpenGL viewport taking up the entire window | 82 | //sets an OpenGL viewport taking up the entire window |
80 | void glut_render_single_projection(){ | 83 | void glut_render_single_projection(){ |
@@ -146,11 +149,12 @@ void glut_render(void) { | @@ -146,11 +149,12 @@ void glut_render(void) { | ||
146 | glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); //texture map will be used as the network color | 149 | glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); //texture map will be used as the network color |
147 | glBindTexture(GL_TEXTURE_1D, cmap_tex); //bind the Brewer texture map | 150 | glBindTexture(GL_TEXTURE_1D, cmap_tex); //bind the Brewer texture map |
148 | 151 | ||
149 | - GT.glCylinder(sigma); //render the GT network | 152 | + GT.glCylinder(sigma, radius); //render the GT network |
150 | 153 | ||
151 | glut_render_right_projection(); //set up a projection for the right half of the window | 154 | glut_render_right_projection(); //set up a projection for the right half of the window |
152 | glut_render_modelview(); //set up the modelview matrix using camera details | 155 | glut_render_modelview(); //set up the modelview matrix using camera details |
153 | - T.glCylinder(sigma); //render the T network | 156 | + T.glCylinder(sigma, radius); //render the T network |
157 | + sigma = radius; // set sigma equal to radius | ||
154 | } | 158 | } |
155 | } | 159 | } |
156 | 160 | ||
@@ -171,12 +175,12 @@ void glut_render(void) { | @@ -171,12 +175,12 @@ void glut_render(void) { | ||
171 | glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); //texture map will be used as the network color | 175 | glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); //texture map will be used as the network color |
172 | glBindTexture(GL_TEXTURE_1D, cmap_tex); //bind the Brewer texture map | 176 | glBindTexture(GL_TEXTURE_1D, cmap_tex); //bind the Brewer texture map |
173 | 177 | ||
174 | - _GT.glCylinder(sigma); //render the GT network | 178 | + _GT.glCylinder(sigma, radius); //render the GT network |
175 | 179 | ||
176 | glut_render_right_projection(); //set up a projection for the right half of the window | 180 | glut_render_right_projection(); //set up a projection for the right half of the window |
177 | glut_render_modelview(); //set up the modelview matrix using camera details | 181 | glut_render_modelview(); //set up the modelview matrix using camera details |
178 | - _T.glCylinder(sigma); //render the T network | ||
179 | - | 182 | + _T.glCylinder(sigma, radius); //render the T network |
183 | + sigma = radius; //set sigma equal to radius | ||
180 | } | 184 | } |
181 | else { | 185 | else { |
182 | glEnable(GL_DEPTH_TEST); //enable depth | 186 | glEnable(GL_DEPTH_TEST); //enable depth |
@@ -185,12 +189,13 @@ void glut_render(void) { | @@ -185,12 +189,13 @@ void glut_render(void) { | ||
185 | glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //clear the screen | 189 | glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //clear the screen |
186 | 190 | ||
187 | //_GT.glRandColorCenterlineGT(dlist1, _gt_t, colormap); | 191 | //_GT.glRandColorCenterlineGT(dlist1, _gt_t, colormap); |
188 | - _GT.glRandColorCylinder1(dlist1, _gt_t, colormap, sigma); | 192 | + _GT.glRandColorCylinder1(dlist1, _gt_t, colormap, sigma, radius); |
189 | 193 | ||
190 | glut_render_right_projection(); //set up a projection for the right half of the window | 194 | glut_render_right_projection(); //set up a projection for the right half of the window |
191 | glut_render_modelview(); //set up the modelview matrix using camera details | 195 | glut_render_modelview(); //set up the modelview matrix using camera details |
192 | //_T.glRandColorCenterlineT(dlist2, _t_gt, colormap); | 196 | //_T.glRandColorCenterlineT(dlist2, _t_gt, colormap); |
193 | - _T.glRandColorCylinder2(dlist2, _t_gt, colormap, sigma); | 197 | + _T.glRandColorCylinder2(dlist2, _t_gt, colormap, sigma, radius); |
198 | + sigma = radius; //set sigma equal to radius | ||
194 | } | 199 | } |
195 | } | 200 | } |
196 | } | 201 | } |
@@ -310,20 +315,10 @@ void glut_mouse(int button, int state, int x, int y){ | @@ -310,20 +315,10 @@ void glut_mouse(int button, int state, int x, int y){ | ||
310 | 315 | ||
311 | // define camera move based on mouse wheel move(actually we can combine this with glut_mouse) | 316 | // define camera move based on mouse wheel move(actually we can combine this with glut_mouse) |
312 | void glut_wheel(int wheel, int direction, int x, int y) { | 317 | void glut_wheel(int wheel, int direction, int x, int y) { |
313 | - /*float cam_move_fac; // camera move unit length | ||
314 | - stim::vec3<float> eye = cam.getPosition(); // get the camera position (eye point) | ||
315 | - stim::vec3<float> focus = cam.getLookAt(); // get the camera focal point | ||
316 | - cam_move_fac = fabs(focus[2] - eye[2]) / 50; // divided by 50 | ||
317 | - | ||
318 | - if (direction > 0) // if it is button 3(up) | ||
319 | - des -= cam_move_fac; | ||
320 | - else // if it is button 4(down) | ||
321 | - des += cam_move_fac;*/ | ||
322 | - float delta; | ||
323 | 318 | ||
324 | - if (direction > 0) // if it is button 3(up) | 319 | + if (direction > 0) // if it is button 3(up), move closer |
325 | delta = zoom_factor; | 320 | delta = zoom_factor; |
326 | - else // if it is button 4(down) | 321 | + else // if it is button 4(down), leave farther |
327 | delta = -zoom_factor; | 322 | delta = -zoom_factor; |
328 | 323 | ||
329 | cam.Push(delta); | 324 | cam.Push(delta); |
@@ -332,19 +327,46 @@ void glut_wheel(int wheel, int direction, int x, int y) { | @@ -332,19 +327,46 @@ void glut_wheel(int wheel, int direction, int x, int y) { | ||
332 | 327 | ||
333 | // define keyboard inputs | 328 | // define keyboard inputs |
334 | void glut_keyboard(unsigned char key, int x, int y){ | 329 | void glut_keyboard(unsigned char key, int x, int y){ |
335 | - if(key == 'm') // if keyboard 'm' is pressed | ||
336 | - { | ||
337 | - if(compareMode && !mappingMode){ // if it is in compare mode | ||
338 | - compareMode = false; | ||
339 | - mappingMode = true; | ||
340 | - } | ||
341 | - else{ // if it is in mapping mode | ||
342 | - compareMode = true; | ||
343 | - mappingMode = false; | ||
344 | - } | ||
345 | - } | ||
346 | - if (key == 27) { // if keyboard "ESC" is pressed | ||
347 | - exit(0); // exit | 330 | + |
331 | + // register different keyboard operation | ||
332 | + switch (key) { | ||
333 | + | ||
334 | + // change render mode | ||
335 | + case 'm': // if keyboard 'm' is pressed, then change render mode | ||
336 | + if (compareMode && !mappingMode && ind) { // if current mode is comparing mode | ||
337 | + compareMode = false; | ||
338 | + mappingMode = true; | ||
339 | + } | ||
340 | + else if (!compareMode && mappingMode && ind) { // if current mode is mapping mode | ||
341 | + compareMode = true; | ||
342 | + mappingMode = false; | ||
343 | + } | ||
344 | + break; | ||
345 | + | ||
346 | + // zooming | ||
347 | + case 'w': // if keyboard 'w' is pressed, then move closer | ||
348 | + delta = zoom_factor; | ||
349 | + cam.Push(delta); | ||
350 | + break; | ||
351 | + case 's': // if keyboard 's' is pressed, then leave farther | ||
352 | + delta = -zoom_factor; | ||
353 | + cam.Push(delta); | ||
354 | + break; | ||
355 | + | ||
356 | + // resample and re-render the cylinder in different radius | ||
357 | + case 'd': // if keyboard 'd' is pressed, then increase radius by radius_factor | ||
358 | + radius += radius_factor; | ||
359 | + break; | ||
360 | + case 'a': // if keyboard 'a' is pressed, then decrease radius by radius_factor | ||
361 | + radius -= radius_factor; | ||
362 | + // get rid of the degenerated case when radius decrease below 0 | ||
363 | + if (radius < 0.001f) | ||
364 | + radius = 0.2; | ||
365 | + break; | ||
366 | + | ||
367 | + // close window and exit application | ||
368 | + case 27: // if keyboard 'ESC' is pressed, then exit | ||
369 | + exit(0); | ||
348 | } | 370 | } |
349 | glutPostRedisplay(); | 371 | glutPostRedisplay(); |
350 | } | 372 | } |
@@ -396,13 +418,13 @@ void glut_initialize(){ | @@ -396,13 +418,13 @@ void glut_initialize(){ | ||
396 | glutMouseFunc(glut_mouse); //executed on a mouse click - sets starting mouse positions for rotations | 418 | glutMouseFunc(glut_mouse); //executed on a mouse click - sets starting mouse positions for rotations |
397 | glutMotionFunc(glut_motion); //executed when the mouse is moved while a button is pressed | 419 | glutMotionFunc(glut_motion); //executed when the mouse is moved while a button is pressed |
398 | if (ind == 1) { //only in mapping mode, keyboard will be used | 420 | if (ind == 1) { //only in mapping mode, keyboard will be used |
399 | - glutKeyboardFunc(glut_keyboard); //register keyboard callback | ||
400 | glutCreateMenu(glut_menu); //register menu option callback | 421 | glutCreateMenu(glut_menu); //register menu option callback |
401 | - glutAddMenuEntry("Comparing Mode", 1);//register menu 1 as comparing mode | ||
402 | - glutAddMenuEntry("Mapping Mode", 2); //register menu 2 as mapping mode | ||
403 | - glutAddMenuEntry("Exit", 3); //register menu 3 as exiting | ||
404 | - glutAttachMenu(GLUT_RIGHT_BUTTON); //register right mouse to open menu option | ||
405 | - } | 422 | + glutAddMenuEntry("Comparing Mode", 1); //register menu 1 as comparing mode |
423 | + glutAddMenuEntry("Mapping Mode", 2); //register menu 2 as mapping mode | ||
424 | + glutAddMenuEntry("Exit", 3); //register menu 3 as exiting | ||
425 | + glutAttachMenu(GLUT_RIGHT_BUTTON); //register right mouse to open menu option | ||
426 | + } | ||
427 | + glutKeyboardFunc(glut_keyboard); //register keyboard callback | ||
406 | glutMouseWheelFunc(glut_wheel); | 428 | glutMouseWheelFunc(glut_wheel); |
407 | 429 | ||
408 | texture_initialize(); //set up texture mapping (create texture maps, enable features) | 430 | texture_initialize(); //set up texture mapping (create texture maps, enable features) |
@@ -579,13 +601,14 @@ int main(int argc, char* argv[]) | @@ -579,13 +601,14 @@ int main(int argc, char* argv[]) | ||
579 | if (1 == swc_ind) { //loading swc files | 601 | if (1 == swc_ind) { //loading swc files |
580 | int device = args["device"].as_int(); //get the device value from the user | 602 | int device = args["device"].as_int(); //get the device value from the user |
581 | num_nets = 2; //set the number of networks to two | 603 | num_nets = 2; //set the number of networks to two |
582 | - //does it need to be resampled?? | ||
583 | sigma = args["sigma"].as_float(); //get the sigma value from the user | 604 | sigma = args["sigma"].as_float(); //get the sigma value from the user |
605 | + radius = sigma; | ||
584 | T.load_swc(args.arg(1)); //load the second (test) network | 606 | T.load_swc(args.arg(1)); //load the second (test) network |
585 | if (args["features"].is_set()) //if the user wants to save features | 607 | if (args["features"].is_set()) //if the user wants to save features |
586 | features(args["features"].as_string()); | 608 | features(args["features"].as_string()); |
587 | - GT = GT.resample(resample_rate * sigma); //resample both networks based on the sigma value | ||
588 | - T = T.resample(resample_rate * sigma); | 609 | + //does it need to be resampled?? |
610 | + //GT = GT.resample(resample_rate * sigma); //resample both networks based on the sigma value | ||
611 | + //T = T.resample(resample_rate * sigma); | ||
589 | if (args["mapping"].is_set()) { | 612 | if (args["mapping"].is_set()) { |
590 | float threshold = args["mapping"].as_float(); | 613 | float threshold = args["mapping"].as_float(); |
591 | map_swc(sigma, device, threshold); | 614 | map_swc(sigma, device, threshold); |
@@ -599,6 +622,7 @@ int main(int argc, char* argv[]) | @@ -599,6 +622,7 @@ int main(int argc, char* argv[]) | ||
599 | int device = args["device"].as_int(); //get the device value from the user | 622 | int device = args["device"].as_int(); //get the device value from the user |
600 | num_nets = 2; //set the number of networks to two | 623 | num_nets = 2; //set the number of networks to two |
601 | sigma = args["sigma"].as_float(); //get the sigma value from the user | 624 | sigma = args["sigma"].as_float(); //get the sigma value from the user |
625 | + radius = sigma; | ||
602 | T.load_obj(args.arg(1)); //load the second (test) network | 626 | T.load_obj(args.arg(1)); //load the second (test) network |
603 | if (args["features"].is_set()) //if the user wants to save features | 627 | if (args["features"].is_set()) //if the user wants to save features |
604 | features(args["features"].as_string()); | 628 | features(args["features"].as_string()); |