Commit 19ec4731eaea24ff9dac28540bf413a40ce04528

Authored by Jiaming Guo
1 parent 8b30eb84

add light

Showing 1 changed file with 88 additions and 63 deletions   Show diff stats
... ... @@ -67,17 +67,13 @@ std::vector<float> colormap;
67 67 // special key indicator
68 68 int mods;
69 69  
70   -// create display lists
71   -GLuint dlist1;
72   -GLuint dlist2;
73   -
74 70 //OpenGL objects
75 71 GLuint cmap_tex = 0; //texture name for the color map
76 72  
77 73 float delta;
78 74 float sigma = 3; //default sigma
79 75 float radius = 3; //equals to radius
80   -int transparancy_fac = 0;
  76 +int adjoint_fac = 0;
81 77  
82 78 //sets an OpenGL viewport taking up the entire window
83 79 void glut_render_single_projection(){
... ... @@ -146,23 +142,31 @@ void glut_render(void) {
146 142 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //clear the screen
147 143  
148 144 glEnable(GL_TEXTURE_1D); //enable texture mapping
149   - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); //texture map will be used as the network color
  145 + if(adjoint_fac == 1)
  146 + 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 + glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
150 149 glBindTexture(GL_TEXTURE_1D, cmap_tex); //bind the Brewer texture map
151 150  
152 151 GT.glCylinder(sigma, radius); //render the GT network
153   - if (transparancy_fac == 1) {
  152 + if (adjoint_fac == 1) {
  153 + glDisable(GL_TEXTURE_1D);
154 154 glEnable(GL_BLEND); //enable color blend
155 155 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); //set blend function
156 156 glDisable(GL_DEPTH_TEST); //should disable depth
157   - glColor4f(1.0f, 1.0f, 1.0f, 0.2f);
158   - T.glCylinder(sigma, radius);
  157 + glColor4f(0.0f, 0.3f, 0.0f, 0.2f);
  158 + T.glAdjointCylinder(sigma, radius);
159 159 glDisable(GL_BLEND);
160 160 glEnable(GL_DEPTH_TEST);
  161 + glEnable(GL_TEXTURE_1D);
  162 + glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
161 163 }
162 164  
163 165 glut_render_right_projection(); //set up a projection for the right half of the window
164 166 glut_render_modelview(); //set up the modelview matrix using camera details
  167 +
165 168 T.glCylinder(sigma, radius); //render the T network
  169 +
166 170 sigma = radius; // set sigma equal to radius
167 171 }
168 172 }
... ... @@ -181,23 +185,31 @@ void glut_render(void) {
181 185 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //clear the screen
182 186  
183 187 glEnable(GL_TEXTURE_1D); //enable texture mapping
184   - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); //texture map will be used as the network color
  188 + if (adjoint_fac == 1)
  189 + 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)
  191 + glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);//map light to texture
185 192 glBindTexture(GL_TEXTURE_1D, cmap_tex); //bind the Brewer texture map
186 193  
187 194 _GT.glCylinder(sigma, radius); //render the GT network
188   - if (transparancy_fac == 1) {
  195 + if (adjoint_fac == 1) {
  196 + glDisable(GL_TEXTURE_1D); //temporarily disable texture
189 197 glEnable(GL_BLEND); //enable color blend
190 198 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); //set blend function
191 199 glDisable(GL_DEPTH_TEST); //should disable depth
192   - glColor4f(1.0f, 1.0f, 1.0f, 0.2f);
193   - _T.glCylinder(sigma, radius);
  200 + glColor4f(0.0f, 0.3f, 0.0f, 0.2f);
  201 + _T.glAdjointCylinder(sigma, radius);
194 202 glDisable(GL_BLEND);
195 203 glEnable(GL_DEPTH_TEST);
  204 + glEnable(GL_TEXTURE_1D); //re-enable texture
  205 + glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
196 206 }
197 207  
198 208 glut_render_right_projection(); //set up a projection for the right half of the window
199 209 glut_render_modelview(); //set up the modelview matrix using camera details
  210 +
200 211 _T.glCylinder(sigma, radius); //render the T network
  212 +
201 213 sigma = radius; //set sigma equal to radius
202 214 }
203 215 else {
... ... @@ -206,54 +218,45 @@ void glut_render(void) {
206 218 glut_render_modelview(); //set up the modelview matrix using camera details
207 219 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //clear the screen
208 220  
209   - _GT.glRandColorCylinder1(dlist1, _gt_t, colormap, sigma, radius);
210   - if (transparancy_fac == 1) {
211   - glEnable(GL_BLEND); //enable color blend
212   - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); //set blend function
213   - glDisable(GL_DEPTH_TEST); //should disable depth
214   - glColor4f(1.0f, 1.0f, 1.0f, 0.2f);
215   - _T.glRandColorCylinder2(dlist2, _t_gt, colormap, sigma, radius);
216   - glDisable(GL_BLEND);
217   - glEnable(GL_DEPTH_TEST);
218   - }
  221 + _GT.glRandColorCylinder(0, _gt_t, colormap, sigma, radius);
219 222  
220 223 glut_render_right_projection(); //set up a projection for the right half of the window
221 224 glut_render_modelview(); //set up the modelview matrix using camera details
222 225  
223   - _T.glRandColorCylinder2(dlist2, _t_gt, colormap, sigma, radius);
  226 + _T.glRandColorCylinder(1, _t_gt, colormap, sigma, radius);
  227 +
224 228 sigma = radius; //set sigma equal to radius
225 229 }
226 230 }
227 231 }
228   -
229   - if (num_nets == 2) { // works only with two networks
230   - std::ostringstream ss;
231   - if (mappingMode) // if it is in mapping mode
232   - ss << "Mapping Mode";
233   - else
234   - ss << "Compare Mode"; // default mode is compare mode
235   -
236   - glDisable(GL_TEXTURE_1D);
237   - glMatrixMode(GL_PROJECTION); // set up the 2d viewport for mode text printing
238   - glPushMatrix();
239   - glLoadIdentity();
240   - int X = glutGet(GLUT_WINDOW_WIDTH); // get the current window width
241   - int Y = glutGet(GLUT_WINDOW_HEIGHT); // get the current window height
242   - glViewport(0, 0, X / 2, Y); // locate to left bottom corner
243   - gluOrtho2D(0, X, 0, Y); // define othogonal aspect
244   - glColor3f(0.0, 1.0, 0.0); // using green to show mode
245   -
246   - glMatrixMode(GL_MODELVIEW);
247   - glPushMatrix();
248   - glLoadIdentity();
249   -
250   - glRasterPos2f(0, 5); //print text in the left bottom corner
251   - glutBitmapString(GLUT_BITMAP_TIMES_ROMAN_24, (const unsigned char*)(ss.str().c_str()));
252   -
253   - glPopMatrix();
254   - glMatrixMode(GL_PROJECTION);
255   - glPopMatrix();
256   - }
  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 + //}
257 260 glutSwapBuffers();
258 261 }
259 262  
... ... @@ -358,12 +361,12 @@ void glut_keyboard(unsigned char key, int x, int y){
358 361 switch (key) {
359 362  
360 363 // change render mode
361   - case 'm': // if keyboard 'm' is pressed, then change render mode
362   - if (compareMode && !mappingMode && ind) { // if current mode is comparing mode
  364 + case 'm': // if keyboard 'm' is pressed, then change render mode
  365 + if (compareMode && !mappingMode && ind && !adjoint_fac) { // if current mode is comparing mode
363 366 compareMode = false;
364 367 mappingMode = true;
365 368 }
366   - else if (!compareMode && mappingMode && ind) { // if current mode is mapping mode
  369 + else if (!compareMode && mappingMode && ind && !adjoint_fac) { // if current mode is mapping mode
367 370 compareMode = true;
368 371 mappingMode = false;
369 372 }
... ... @@ -389,13 +392,13 @@ void glut_keyboard(unsigned char key, int x, int y){
389 392 if (radius < 0.001f)
390 393 radius = 0.2;
391 394 break;
392   -
393   - // render a transparant T very close to GT
394   - case 32: // if keyboard 'SPACE' is pressed, then change the transparancy_fac
395   - if (compareMode && !mappingMode && !transparancy_fac)
396   - transparancy_fac = 1;
397   - else
398   - transparancy_fac = 0;
  395 +
  396 + // render a transparant T very close to GT in compare mode
  397 + case 32: // if keyboard 'SPACE' is pressed, then change the adjoint_fac
  398 + if (!adjoint_fac && compareMode)
  399 + adjoint_fac = 1;
  400 + else if(adjoint_fac && compareMode)
  401 + adjoint_fac = 0;
399 402 break;
400 403  
401 404 // close window and exit application
... ... @@ -468,6 +471,28 @@ void glut_initialize(){
468 471 //place the camera along the z-axis at a distance determined by the network size along x and y
469 472 cam.setPosition(c + stim::vec<float>(0, 0, camera_factor * std::max(bb.size()[0], bb.size()[1])));
470 473 cam.LookAt(c[0], c[1], c[2]); //look at the center of the network
  474 +
  475 + // 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 };
  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
  484 + glClearColor(0.0, 0.0, 0.0, 1.0);
  485 + glShadeModel(GL_SMOOTH);
  486 +
  487 + glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);
  488 + glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse1);
  489 + glLightfv(GL_LIGHT0, GL_POSITION, position1);
  490 + glLightfv(GL_LIGHT1, GL_AMBIENT, ambient);
  491 + glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuse2);
  492 + glLightfv(GL_LIGHT1, GL_POSITION, position2);
  493 +
  494 + glEnable(GL_LIGHTING);
  495 + glEnable(GL_LIGHT0);
471 496 }
472 497  
473 498 #ifdef __CUDACC__
... ...