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
00116
00117
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
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 }