SHOW:
|
|
- or go back to the newest paste.
1 | #include <iostream> | |
2 | #include <gl\glut.h> | |
3 | #include <gl\glaux.h> | |
4 | #include <time.h> | |
5 | ||
6 | float cx=0, cy=0,bx = 0,by = 0; | |
7 | ||
8 | int counter[4] = {1,1,1,1}; | |
9 | ||
10 | void key(unsigned char key, int x, int y) | |
11 | { | |
12 | switch (key) | |
13 | { | |
14 | case 'd': | |
15 | cx+=0.5f; | |
16 | std::cout << "Vi nazhali D " << counter[0] << " raz(a)." << std::endl; | |
17 | counter[0]++; | |
18 | break; | |
19 | case 'a': | |
20 | cx-=0.5f; | |
21 | std::cout << "Vi nazhali A " << counter[1] << " raz(a)." << std::endl; | |
22 | counter[1]++; | |
23 | break; | |
24 | case 'w': | |
25 | cy+=0.5f; | |
26 | std::cout << "Vi nazhali W " << counter[2] << " raz(a)." << std::endl; | |
27 | counter[2]++; | |
28 | break; | |
29 | case 's': | |
30 | cy-=0.5f; | |
31 | std::cout << "Vi nazhali S " << counter[3] << " raz(a)." << std::endl; | |
32 | counter[3]++; | |
33 | break; | |
34 | } | |
35 | } | |
36 | void coolimg(int width, int height) { | |
37 | const float ar = (float) width / (float) height; | |
38 | ||
39 | glViewport(0, 0, width , height); | |
40 | glMatrixMode(GL_PROJECTION); | |
41 | glLoadIdentity(); | |
42 | glFrustum(-ar, ar, -1.0, 1.0, 2.0, 100.0); | |
43 | ||
44 | glMatrixMode(GL_MODELVIEW); | |
45 | glLoadIdentity() ; | |
46 | } | |
47 | void display() { | |
48 | const double t = glutGet(GLUT_ELAPSED_TIME) / 1000.0; | |
49 | const double a = t*90.0; | |
50 | glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); | |
51 | glColor3d(1,0,0); // цвет 3d | |
52 | glPushMatrix(); | |
53 | glTranslated(cx + 0.92,cy + 0.92,-30); | |
54 | glRotated(60,1,0,0); | |
55 | glRotated(a,0,0,1); | |
56 | glutSolidSphere(1,5000,5000); | |
57 | glPopMatrix(); | |
58 | glPushMatrix(); | |
59 | if (bx = cx, by = cy) { | |
60 | srand(time(0)); | |
61 | glTranslated(bx + rand()%15,by + rand()%15, -30); | |
62 | } | |
63 | glRotated(60,1,0,0); | |
64 | glRotated(a,0,0,1); | |
65 | glutSolidSphere(1,5000,5000); | |
66 | glPopMatrix(); | |
67 | glutSwapBuffers(); | |
68 | glutPostRedisplay(); // перерисовка окна | |
69 | } | |
70 | ||
71 | const GLfloat light_ambient[] = { 0.0f, 0.0f, 0.0f, 1.0f }; | |
72 | const GLfloat light_diffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f }; | |
73 | const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f }; | |
74 | const GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f }; | |
75 | ||
76 | const GLfloat mat_ambient[] = { 0.7f, 0.7f, 0.7f, 1.0f }; | |
77 | const GLfloat mat_diffuse[] = { 0.8f, 0.8f, 0.8f, 1.0f }; | |
78 | const GLfloat mat_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f }; | |
79 | const GLfloat high_shininess[] = { 100.0f }; | |
80 | ||
81 | ||
82 | int main(int argc, char **argv) { | |
83 | ||
84 | // инициализация | |
85 | glutInit(&argc, argv); | |
86 | glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); | |
87 | glutInitWindowPosition(100,100); | |
88 | glutInitWindowSize(400,400); | |
89 | glutCreateWindow("Game"); | |
90 | // Функции | |
91 | glutReshapeFunc(coolimg); | |
92 | glutDisplayFunc(display); | |
93 | glutKeyboardFunc(key); | |
94 | // 3d | |
95 | glClearColor(1,1,1,1); | |
96 | glEnable(GL_CULL_FACE); | |
97 | glCullFace(GL_BACK); | |
98 | ||
99 | glEnable(GL_DEPTH_TEST); | |
100 | glDepthFunc(GL_LESS); | |
101 | ||
102 | glEnable(GL_LIGHT0); | |
103 | glEnable(GL_NORMALIZE); | |
104 | glEnable(GL_COLOR_MATERIAL); | |
105 | glEnable(GL_LIGHTING); | |
106 | ||
107 | glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); | |
108 | glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); | |
109 | glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular); | |
110 | glLightfv(GL_LIGHT0, GL_POSITION, light_position); | |
111 | ||
112 | glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient); | |
113 | glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); | |
114 | glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); | |
115 | glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess); | |
116 | // Основной цикл GLUT | |
117 | glutMainLoop(); | |
118 | ||
119 | return 1; | |
120 | } |