Commit e1700dd03360641a7dce685886ffdfa85e44f4c3

Authored by Jiaming Guo
1 parent 19ec4731

fixed bugs when introducing lighting

Showing 1 changed file with 74 additions and 47 deletions   Show diff stats
@@ -74,6 +74,7 @@ float delta; @@ -74,6 +74,7 @@ float delta;
74 float sigma = 3; //default sigma 74 float sigma = 3; //default sigma
75 float radius = 3; //equals to radius 75 float radius = 3; //equals to radius
76 int adjoint_fac = 0; 76 int adjoint_fac = 0;
  77 +int light_fac = 0;
77 78
78 //sets an OpenGL viewport taking up the entire window 79 //sets an OpenGL viewport taking up the entire window
79 void glut_render_single_projection(){ 80 void glut_render_single_projection(){
@@ -142,18 +143,19 @@ void glut_render(void) { @@ -142,18 +143,19 @@ void glut_render(void) {
142 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //clear the screen 143 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //clear the screen
143 144
144 glEnable(GL_TEXTURE_1D); //enable texture mapping 145 glEnable(GL_TEXTURE_1D); //enable texture mapping
145 - if(adjoint_fac == 1) 146 + if(light_fac == 0)
146 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); //texture map will be used as the network color 147 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); //texture map will be used as the network color
147 - else if (adjoint_fac == 0) 148 + else
148 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 149 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
  150 +
149 glBindTexture(GL_TEXTURE_1D, cmap_tex); //bind the Brewer texture map 151 glBindTexture(GL_TEXTURE_1D, cmap_tex); //bind the Brewer texture map
150 152
151 GT.glCylinder(sigma, radius); //render the GT network 153 GT.glCylinder(sigma, radius); //render the GT network
152 if (adjoint_fac == 1) { 154 if (adjoint_fac == 1) {
153 - glDisable(GL_TEXTURE_1D); 155 + glDisable(GL_TEXTURE_1D); //disable texture in order to render in other color
154 glEnable(GL_BLEND); //enable color blend 156 glEnable(GL_BLEND); //enable color blend
155 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); //set blend function 157 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); //set blend function
156 - glDisable(GL_DEPTH_TEST); //should disable depth 158 + glDisable(GL_DEPTH_TEST); //should disable depth to render transparancy
157 glColor4f(0.0f, 0.3f, 0.0f, 0.2f); 159 glColor4f(0.0f, 0.3f, 0.0f, 0.2f);
158 T.glAdjointCylinder(sigma, radius); 160 T.glAdjointCylinder(sigma, radius);
159 glDisable(GL_BLEND); 161 glDisable(GL_BLEND);
@@ -185,9 +187,9 @@ void glut_render(void) { @@ -185,9 +187,9 @@ void glut_render(void) {
185 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //clear the screen 187 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //clear the screen
186 188
187 glEnable(GL_TEXTURE_1D); //enable texture mapping 189 glEnable(GL_TEXTURE_1D); //enable texture mapping
188 - if (adjoint_fac == 1) 190 + if (light_fac == 0)
189 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); //texture map will be used as the network color 191 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); //texture map will be used as the network color
190 - else if (adjoint_fac == 0) 192 + else
191 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);//map light to texture 193 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);//map light to texture
192 glBindTexture(GL_TEXTURE_1D, cmap_tex); //bind the Brewer texture map 194 glBindTexture(GL_TEXTURE_1D, cmap_tex); //bind the Brewer texture map
193 195
@@ -229,34 +231,41 @@ void glut_render(void) { @@ -229,34 +231,41 @@ void glut_render(void) {
229 } 231 }
230 } 232 }
231 } 233 }
232 - glDisable(GL_TEXTURE_1D); //disable texture  
233 -  
234 - //if (num_nets == 2) { // works only with two networks  
235 - // std::ostringstream ss;  
236 - // if (mappingMode) // if it is in mapping mode  
237 - // ss << "Mapping Mode";  
238 - // else  
239 - // ss << "Compare Mode"; // default mode is compare mode  
240 - // glMatrixMode(GL_PROJECTION); // set up the 2d viewport for mode text printing  
241 - // glPushMatrix();  
242 - // glLoadIdentity();  
243 - // int X = glutGet(GLUT_WINDOW_WIDTH); // get the current window width  
244 - // int Y = glutGet(GLUT_WINDOW_HEIGHT); // get the current window height  
245 - // glViewport(0, 0, X / 2, Y); // locate to left bottom corner  
246 - // gluOrtho2D(0, X, 0, Y); // define othogonal aspect  
247 - // glColor3f(0.0, 1.0, 0.0); // using green to show mode  
248 -  
249 - // glMatrixMode(GL_MODELVIEW);  
250 - // glPushMatrix();  
251 - // glLoadIdentity();  
252 -  
253 - // glRasterPos2f(0, 5); //print text in the left bottom corner  
254 - // glutBitmapString(GLUT_BITMAP_TIMES_ROMAN_24, (const unsigned char*)(ss.str().c_str()));  
255 -  
256 - // glPopMatrix();  
257 - // glMatrixMode(GL_PROJECTION);  
258 - // glPopMatrix();  
259 - //} 234 +
  235 + if (num_nets == 2) { // works only with two networks
  236 + std::ostringstream ss;
  237 + if (mappingMode) // if it is in mapping mode
  238 + ss << "Mapping Mode";
  239 + else
  240 + ss << "Compare Mode"; // default mode is compare mode
  241 +
  242 + glDisable(GL_TEXTURE_1D);
  243 + if (light_fac == 1)
  244 + glDisable(GL_LIGHTING);
  245 + glMatrixMode(GL_PROJECTION); // set up the 2d viewport for mode text printing
  246 + glPushMatrix();
  247 + glLoadIdentity();
  248 + int X = glutGet(GLUT_WINDOW_WIDTH); // get the current window width
  249 + int Y = glutGet(GLUT_WINDOW_HEIGHT); // get the current window height
  250 + glViewport(0, 0, X / 2, Y); // locate to left bottom corner
  251 + gluOrtho2D(0, X, 0, Y); // define othogonal aspect
  252 + glColor3f(0.8, 0.0, 0.0); // using red to show mode
  253 +
  254 + glMatrixMode(GL_MODELVIEW);
  255 + glPushMatrix();
  256 + glLoadIdentity();
  257 +
  258 + glRasterPos2f(0, 5); //print text in the left bottom corner
  259 + glutBitmapString(GLUT_BITMAP_TIMES_ROMAN_24, (const unsigned char*)(ss.str().c_str()));
  260 +
  261 + glPopMatrix();
  262 + glMatrixMode(GL_PROJECTION);
  263 + glPopMatrix();
  264 + glColor3f(1.0, 1.0, 1.0); //clear red color
  265 + if (light_fac == 1)
  266 + glEnable(GL_LIGHTING);
  267 + }
  268 +
260 glutSwapBuffers(); 269 glutSwapBuffers();
261 } 270 }
262 271
@@ -393,11 +402,27 @@ void glut_keyboard(unsigned char key, int x, int y){ @@ -393,11 +402,27 @@ void glut_keyboard(unsigned char key, int x, int y){
393 radius = 0.2; 402 radius = 0.2;
394 break; 403 break;
395 404
  405 + // turn on/off the light
  406 + case 'l': // if keyboard 'l' is pressed, then change the light
  407 + if (!light_fac && !adjoint_fac) {
  408 + light_fac = 1;
  409 + glEnable(GL_LIGHTING);
  410 + glEnable(GL_LIGHT0);
  411 + glEnable(GL_LIGHT1);
  412 + }
  413 + else if (light_fac && !adjoint_fac) {
  414 + light_fac = 0;
  415 + glDisable(GL_LIGHTING);
  416 + glDisable(GL_LIGHT0);
  417 + glDisable(GL_LIGHT1);
  418 + }
  419 + break;
  420 +
396 // render a transparant T very close to GT in compare mode 421 // render a transparant T very close to GT in compare mode
397 case 32: // if keyboard 'SPACE' is pressed, then change the adjoint_fac 422 case 32: // if keyboard 'SPACE' is pressed, then change the adjoint_fac
398 - if (!adjoint_fac && compareMode) 423 + if (!adjoint_fac && compareMode && !light_fac)
399 adjoint_fac = 1; 424 adjoint_fac = 1;
400 - else if(adjoint_fac && compareMode) 425 + else if(adjoint_fac && compareMode && !light_fac)
401 adjoint_fac = 0; 426 adjoint_fac = 0;
402 break; 427 break;
403 428
@@ -473,26 +498,28 @@ void glut_initialize(){ @@ -473,26 +498,28 @@ void glut_initialize(){
473 cam.LookAt(c[0], c[1], c[2]); //look at the center of the network 498 cam.LookAt(c[0], c[1], c[2]); //look at the center of the network
474 499
475 // light 500 // light
476 - stim::vec3<float> eye = cam.getPosition(); //get the camera position point  
477 - stim::vec3<float> focus = cam.getLookAt(); //get the camera focal point  
478 -  
479 GLfloat ambient[] = { 0.2, 0.2, 0.2, 1.0 }; 501 GLfloat ambient[] = { 0.2, 0.2, 0.2, 1.0 };
480 - GLfloat diffuse1[] = { 1.0, 1.0, 1.0, 1.0 };  
481 - GLfloat diffuse2[] = { 0.2, 0.2, 0.2, 1.0 };  
482 - GLfloat position1[] = { 3*focus[0], 3*focus[1], -3*eye[2], 1.0 }; // upper right light source  
483 - GLfloat position2[] = { -2*focus[0], -2*focus[1], -3*eye[2], 0.0 }; // lower left light source 502 + GLfloat diffuse1[] = { 0.8, 0.8, 0.8, 1.0 };
  503 + GLfloat diffuse2[] = { 0.4, 0.4, 0.4, 1.0 };
  504 + //GLfloat specular[] = { 1.0, 1.0, 1.0, 1.0 };
  505 + GLfloat position1[] = { 2 * c[0], 4 * c[1], 1 * c[0], 1.0 }; // upper right light source
  506 + GLfloat position2[] = { 0.0, -2 * c[1], 1 * c[0], 1.0 }; // lower left light source
484 glClearColor(0.0, 0.0, 0.0, 1.0); 507 glClearColor(0.0, 0.0, 0.0, 1.0);
485 glShadeModel(GL_SMOOTH); 508 glShadeModel(GL_SMOOTH);
486 509
487 - glLightfv(GL_LIGHT0, GL_AMBIENT, ambient); 510 +
  511 + glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambient);
  512 +
488 glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse1); 513 glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse1);
  514 + //glLightfv(GL_LIGHT0, GL_SPECULAR, specular);
489 glLightfv(GL_LIGHT0, GL_POSITION, position1); 515 glLightfv(GL_LIGHT0, GL_POSITION, position1);
490 - glLightfv(GL_LIGHT1, GL_AMBIENT, ambient); 516 + //glMaterialfv(GL_FRONT, GL_SPECULAR, specular);
  517 + //glMaterialf(GL_FRONT, GL_SHININESS, 60.0);
  518 +
491 glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuse2); 519 glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuse2);
492 glLightfv(GL_LIGHT1, GL_POSITION, position2); 520 glLightfv(GL_LIGHT1, GL_POSITION, position2);
493 521
494 - glEnable(GL_LIGHTING);  
495 - glEnable(GL_LIGHT0); 522 + glEnable(GL_NORMALIZE);
496 } 523 }
497 524
498 #ifdef __CUDACC__ 525 #ifdef __CUDACC__