google rss rss

doneykoo [Ouditian]

DKzone- Ouditian Technology

Notes of Learning OpenGL Programming Guide [3]



  1 // #pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
  2 
  3 #include "GL\glut.h"
  4 #include <iostream>
  5 
  6 static GLfloat fSpin = 0.0;
  7 static GLfloat fClearBlue = 0.2;
  8 static bool bRotating = false;
  9 
 10 void display(void)
 11 {
 12     // clear
 13     glClear(GL_COLOR_BUFFER_BIT);
 14 
 15     glPushMatrix();
 16     glRotatef(-fSpin, 0.00.01.0);
 17     glColor3f(1.01.01.0);
 18     glRectf(-25.0-25.025.025.0);
 19 
 20     glColor3f(1.00.00.0);
 21 
 22     glBegin(GL_POLYGON);
 23     glVertex3i(-16,    18,    0);
 24     glVertex3i(16,    18,    0);
 25     glVertex3i(16,    10,    0);
 26     glVertex3i(-16,    10,    0);
 27     glEnd();
 28 
 29     glBegin(GL_POLYGON);
 30     glVertex3i(-4,    10,    0);
 31     glVertex3i(4,    10,    0);
 32     glVertex3i(4,    5,    0);
 33     glVertex3i(-4,    5,    0);
 34     glEnd();
 35 
 36     glBegin(GL_POLYGON);
 37     glVertex3i(-20,    5,    0);
 38     glVertex3i(20,    5,    0);
 39     glVertex3i(20,    -3,    0);
 40     glVertex3i(-20,    -3,    0);
 41     glEnd();
 42 
 43     glBegin(GL_POLYGON);
 44     glVertex3i(0,    2,    0);
 45     glVertex3i(18,    -16,0);
 46     glVertex3i(13,    -21,0);
 47     glVertex3i(0,    -8,0);
 48     glEnd();
 49     
 50     glBegin(GL_POLYGON);
 51     glVertex3i(0,    2,    0);
 52     glVertex3i(-18,    -16,0);
 53     glVertex3i(-13,    -21,0);
 54     glVertex3i(0,    -8,0);
 55     glEnd();
 56 
 57     glPopMatrix();
 58 
 59     glutSwapBuffers();
 60 }
 61 
 62 void spinDisplay(void)
 63 {
 64     // change the params for displaying the squre
 65     fSpin += 0.05;
 66     if (fSpin > 360.0) {
 67         fSpin -= 360.0;
 68     }
 69     glutPostRedisplay();    
 70 }
 71 
 72 void reshape(int w, int h)
 73 {
 74     glViewport(00, (GLsizei) w, (GLsizei) h);
 75     glMatrixMode(GL_PROJECTION);
 76     glLoadIdentity();
 77     glOrtho(-50.050.0-50.050.0-1.01.0);
 78     glMatrixMode(GL_MODELVIEW);
 79     glLoadIdentity();
 80 }
 81 
 82 void mouse(int button, int state, int x, int y)
 83 {
 84     switch(button) {
 85         case GLUT_LEFT_BUTTON:
 86             // start or stop the rotating square
 87             if (state == GLUT_DOWN && !bRotating) {
 88                 bRotating = true;
 89                 glutIdleFunc(&spinDisplay);
 90             }
 91             else if (state == GLUT_DOWN && bRotating) {
 92                 bRotating = false;
 93                 glutIdleFunc(NULL);
 94                 if ((GLint)(fSpin+0.5)%90 == 0) {
 95                     fClearBlue = 1.0 - fClearBlue;
 96                     glClearColor(0.00.0, fClearBlue, 0.0);
 97                 }
 98             }
 99             break;
100         case GLUT_RIGHT_BUTTON:
101             break;
102         default:
103             break;
104     }
105 }
106 
107 void init(void)
108 {
109     // select the clearing color
110     glClearColor(0.00.0, fClearBlue, 0.0);
111 
112     glShadeModel(GL_FLAT);
113 }
114 
115 void idle(void)
116 {
117     if (glutGetWindow() == 0) {
118         exit(0);
119     }
120 }
121 
122 /*
123  * Declare display mode, window size, position, 
124  * open a window titled,
125  * call init routines,
126  * register display, reshape, mouse callback function
127  * enter main loop
128  */
129 int main( int argc, char * argv[] )
130 {
131     glutInit(&argc, argv);
132 
133     // GLUT_DOUBLE - double buffer
134     glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
135     glutInitWindowPosition(100100);
136     glutInitWindowSize(400400);
137     glutCreateWindow("DoNeY's first OpenGL app");
138 
139     init();
140 
141     glutDisplayFunc(&display);
142     glutReshapeFunc(&reshape);
143     glutMouseFunc(&mouse);
144     glutIdleFunc(&idle);
145     
146     glutMainLoop();
147     return 0;
148 }
149 



posted on 2010-01-31 14:22 DoNeY 阅读(282) 评论(0)  编辑  收藏 所属分类: GameDev


只有注册用户登录后才能发表评论。


网站导航:
 
  doneykoo blogjava