Main Page | File List

gl.cpp

00001 #include <GL/glut.h>
00002 #include <cstdlib>
00003 #include "Canvas.h"
00004 
00005 
00006 int main_window;
00007 int win_w, win_h;
00008 
00009 GLuint texNames[10];
00010 Canvas tex[10];
00011 
00012 
00013 void init_texture()
00014 {
00015   glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
00016 
00017   glGenTextures(1, texNames);
00018   glBindTexture(GL_TEXTURE_2D, texNames[0]);
00019 
00020   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
00021   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
00022   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
00023   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
00024 
00025   tex[0].ReadPPM("earth3.ppm");
00026   glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 
00027                tex[0].hReso, tex[0].vReso, 
00028                0, GL_RGB, GL_FLOAT, tex[0].rgbs);
00029 
00030   glEnable(GL_TEXTURE_2D);
00031 }
00032 
00033 void init(void)
00034 {    
00035    glClearColor (0.0, 0.0, 0.0, 0.0);
00036    glShadeModel(GL_SMOOTH);
00037    glEnable(GL_DEPTH_TEST);
00038 
00039    init_texture();
00040 }
00041 
00042 
00043 void display(void)
00044 {
00045   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
00046   
00047   {
00048     int viewport_w = win_w / 2, viewport_h = win_h / 2;
00049     int viewport_sx = 0, viewport_sy = 0;
00050     
00051     glViewport(viewport_sx, viewport_sy , viewport_w, viewport_h);
00052 
00053     glMatrixMode(GL_PROJECTION);
00054     glLoadIdentity();
00055     gluPerspective(90, float(viewport_w) / viewport_h, .5, 30.0);
00056 
00057     glMatrixMode(GL_MODELVIEW);
00058     glLoadIdentity();
00059 
00060     glBegin(GL_TRIANGLES);
00061     {    
00062       glTexCoord2f(0, 0); 
00063       glVertex3f( -2,  0, -2 );
00064       glTexCoord2f(1, 0); 
00065       glVertex3f(  2,  0, -2 );
00066       glTexCoord2f(0.5, 1); 
00067       glVertex3f(  0,  2, -2 );
00068     }
00069     glEnd();
00070   }
00071 
00072   {
00073     int viewport_w = win_w / 2, viewport_h = win_h / 2;
00074     int viewport_sx = win_w / 2, viewport_sy = 0;
00075     
00076     glViewport(viewport_sx, viewport_sy , viewport_w, viewport_h);
00077 
00078     glMatrixMode(GL_PROJECTION);
00079     glLoadIdentity();
00080     gluPerspective(90, float(viewport_w) / viewport_h, .5, 30.0);
00081 
00082     glMatrixMode(GL_MODELVIEW);
00083     glLoadIdentity();
00084 
00085     glBegin(GL_TRIANGLES);
00086     {    
00087       glTexCoord2f(0, 0); 
00088       glVertex3f( -2,  0, -2 );
00089       glTexCoord2f(1, 0); 
00090       glVertex3f(  2,  0, -2 );
00091       glTexCoord2f(0.5, 1); 
00092       glVertex3f(  0,  2, -2 );
00093     }
00094     glEnd();
00095   }
00096 
00097   glutSwapBuffers();
00098 }
00099 
00100 
00101 void reshape(int w, int h)
00102 {
00103   win_w = w;  win_h = h;
00104 
00105   glViewport(0, 0, (GLsizei) win_w, (GLsizei) win_h);
00106 
00107   glMatrixMode(GL_PROJECTION);
00108   glLoadIdentity();
00109   gluPerspective(90, (GLfloat) win_w/(GLfloat) win_h, .5, 30.0);
00110 }
00111 
00112 
00113 void myGlutIdle( void )
00114 {
00115   /* According to the GLUT specification, the current window is 
00116      undefined during an idle callback.  So we need to explicitly change
00117      it if necessary */
00118   if ( glutGetWindow() != main_window ) 
00119     glutSetWindow(main_window);  
00120 
00121   glutPostRedisplay();
00122 }
00123 
00124 void keyboard(unsigned char key, int x, int y)
00125 {
00126   if(key == 'q' || key == 'Q')
00127     exit(0);
00128 }
00129 
00130 
00131 
00132 void mouse(int button, int state, int x, int y) 
00133 {
00134 
00135   if (button == GLUT_LEFT_BUTTON) {
00136     if (state == GLUT_DOWN) {
00137       // do something...
00138     }
00139   }
00140   
00141 }
00142  
00143 
00144 int main(int argc, char** argv)
00145 {
00146    glutInit(&argc, argv);
00147    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
00148    glutInitWindowSize(512, 512);
00149    glutInitWindowPosition(100, 100);
00150    main_window = glutCreateWindow(argv[0]);
00151 
00152    init();
00153 
00154    glutDisplayFunc(display);
00155    glutReshapeFunc(reshape);
00156    glutIdleFunc( myGlutIdle );
00157 
00158    glutMouseFunc(mouse);
00159 
00160    glutKeyboardFunc(keyboard);
00161 
00162    glutMainLoop();
00163    return 0; 
00164 }

Generated on Wed Aug 11 07:13:46 2004 by doxygen 1.3.6