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