Advertisement
osence

lab5 opengl

Oct 11th, 2020
279
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.48 KB | None | 0 0
  1.  
  2. #include <GL/glut.h>
  3. #include <math.h>
  4. // Вращение по орбите
  5. float alpha = 5;
  6. //Свет
  7. float ambient[] = {0.0, 0.0, 0.0, 1.0};
  8. float diffuse[] = { 1.0,1.0,1.0,1.0 };
  9. float lpos[] = { 0.0, 0.0, 0.0, 1.0 };
  10. float black[] = { 0.0, 0.0, 0.0, 1.0 };
  11. //Переменные для поворота мышкой
  12. double angle1 = 0.0f;
  13. double deltaAngle1 = 0.0f;
  14. double angle2 = 0.0f;
  15. double deltaAngle2 = 0.0f;
  16. int xOrigin = 0;
  17. int yOrigin = 0;
  18. bool leftButtonDown = false;
  19.  
  20. //Переменные для отрисовки круга
  21. GLfloat theta;
  22. GLfloat pi = acos(-1.0);
  23. GLfloat radius = 2.0f; // радиус
  24. GLfloat step = 6.0f; // чем больше шаг тем хуже диск
  25.  
  26. //Переменная отвечающая за развивание флага
  27. GLfloat k = 0.0f;
  28.  
  29.  
  30.  
  31. void mouseButton(int button, int state, int x, int y) {
  32.     if (button == GLUT_LEFT_BUTTON) {
  33.         if (state == GLUT_DOWN) {
  34.             xOrigin = x;
  35.             yOrigin = y;
  36.             leftButtonDown = true;
  37.         }
  38.         else {
  39.             leftButtonDown = false;
  40.             angle1 += deltaAngle1;
  41.             angle2 += deltaAngle2;
  42.             deltaAngle1 = 0;
  43.             deltaAngle2 = 0;
  44.         }
  45.     }
  46. }
  47.  
  48. void mouseMove(int x, int y) {
  49.     if (leftButtonDown) {
  50.         deltaAngle1 = (x - xOrigin)*0.5f;
  51.         deltaAngle2 = (y - yOrigin)*0.5f;
  52.  
  53.     }
  54. }
  55.  
  56. void renderScene(void) {
  57.     glEnable(GL_LIGHT0);
  58.     glLightfv(GL_LIGHT0, GL_POSITION, lpos);
  59.     glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
  60.     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  61.     // обнуление трансформации
  62.     glLoadIdentity();
  63.     // установка камеры
  64.     gluLookAt(0.0f, 0.0f, 10.0f,
  65.         0.0f, 0.0f, 0.0f,
  66.         0.0f, 1.0f, 0.0f);
  67.     glPushMatrix();
  68.     glRotatef(angle1 + deltaAngle1, 0, 1, 0);
  69.     glRotatef(angle2 + deltaAngle2, 1, 0, 0);
  70.     glPushMatrix();
  71.     glDisable(GL_LIGHTING);
  72.     glutSolidSphere(0.7, 128, 128);     //Солнце
  73.     glEnable(GL_LIGHTING);
  74.  
  75.  
  76.     alpha+=0.1;
  77.    
  78.     glPushMatrix();
  79.     glRotatef(alpha*10.0, 0, 1, 0);
  80.     glTranslatef(-1.1, 0, 0);
  81.     glutSolidSphere(0.025, 128, 128);       //Меркурий
  82.     glPopMatrix();
  83.  
  84.  
  85.     glPushMatrix();
  86.     glRotatef(alpha*9.0, 0, 1, 0);
  87.     glTranslatef(-1.3, 0, 0);
  88.     glutSolidSphere(0.06, 128, 128);        //Венера
  89.     glPopMatrix();
  90.    
  91.     glPushMatrix();
  92.     glRotatef(alpha*8.0, 0, 1, 0);
  93.     glTranslatef(-1.5, 0, 0);
  94.     glutSolidSphere(0.065, 128, 128);       //Земля
  95.     glPopMatrix();
  96.    
  97.     glPushMatrix();
  98.     glRotatef(alpha*7.0, 0, 1, 0);
  99.     glTranslatef(-1.7, 0, 0);
  100.     glutSolidSphere(0.02, 128, 128);        //Церера
  101.     glPopMatrix();
  102.    
  103.     glPushMatrix();
  104.     glRotatef(alpha*6.0, 0, 1, 0);
  105.     glTranslatef(-1.9, 0, 0);
  106.     glutSolidSphere(0.025, 128, 128);       //Марс
  107.     glPopMatrix();
  108.    
  109.     glPushMatrix();
  110.     glRotatef(alpha*5.0, 0, 1, 0);
  111.     glTranslatef(-2.6, 0, 0);
  112.     glutSolidSphere(0.25, 128, 128);        //Юпитер
  113.     glPopMatrix();
  114.    
  115.     glPushMatrix();
  116.     glRotatef(alpha*4.0, 0, 1, 0);
  117.     glTranslatef(-3.2, 0, 0);
  118.     glutSolidSphere(0.2, 128, 128);     //Сатурн
  119.     glPopMatrix();
  120.    
  121.     glPushMatrix();
  122.     glRotatef(alpha*3.0, 0, 1, 0);
  123.     glTranslatef(-3.6, 0, 0);
  124.     glutSolidSphere(0.11, 128, 128);        //Уран
  125.     glPopMatrix();
  126.    
  127.     glPushMatrix();
  128.     glRotatef(alpha*2.0, 0, 1, 0);
  129.     glTranslatef(-3.87, 0, 0);
  130.     glutSolidSphere(0.115, 128, 128);       //Нептун
  131.     glPopMatrix();
  132.  
  133.     glPopMatrix();
  134.    
  135.     glutSwapBuffers();
  136. }
  137.  
  138. void changeSize(int w, int h) {
  139.     if (h == 0)
  140.         h = 1;
  141.     float ratio = 1.0* w / h;
  142.     // используем матрицу проекции
  143.     glMatrixMode(GL_PROJECTION);
  144.  
  145.     // Reset матрицы
  146.     glLoadIdentity();
  147.  
  148.     // определяем окно просмотра
  149.     glViewport(0, 0, w, h);
  150.  
  151.     // установить корректную перспективу.
  152.     gluPerspective(45, ratio, 1, 1000);
  153.  
  154.     // вернуться к модели
  155.     glMatrixMode(GL_MODELVIEW);
  156. }
  157.  
  158. int main(int argc, char **argv) {
  159.  
  160.     // инициализация
  161.     glutInit(&argc, argv);
  162.     glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
  163.     glutInitWindowPosition(100, 100);
  164.     glutInitWindowSize(1000, 600);
  165.     glutCreateWindow("Test project");
  166.     glEnable(GL_DEPTH_TEST);
  167.     //свет
  168.     glEnable(GL_LIGHTING);
  169.     glEnable(GL_NORMALIZE);
  170.     //glLightModelfv(GL_LIGHT_MODEL_AMBIENT, black);
  171.     glEnable(GL_COLOR_MATERIAL);
  172.     glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
  173.     // регистрация обратных вызовов
  174.     glutDisplayFunc(renderScene);
  175.     glutReshapeFunc(changeSize);
  176.     glutIdleFunc(renderScene);
  177.  
  178.     glutMouseFunc(mouseButton);
  179.     glutMotionFunc(mouseMove);
  180.  
  181.     // Основной цикл GLUT
  182.     glutMainLoop();
  183.     return 0;
  184. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement