LordMirai

planets

Apr 11th, 2022
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.84 KB | None | 0 0
  1. /*
  2.  *  planet.c
  3.  *  Programul arata cum se compun transformarile de rotatie si de translatie
  4.  *  pentru desenarea obiectelor rotite sau translatate.
  5.  *  Interactiune:  left, right, up, down
  6.  *
  7.  */
  8. #include "glos.h"
  9.  
  10. #include <GL/gl.h>
  11. #include <GL/glu.h>
  12. #include <GL/glaux.h>
  13.  
  14. void myinit(void);
  15. void drawPlane(void);
  16. void CALLBACK dayAdd(void);
  17. void CALLBACK daySubtract(void);
  18. void CALLBACK yearAdd(void);
  19. void CALLBACK yearSubtract(void);
  20. void CALLBACK display(void);
  21. void CALLBACK moonAdd(void);
  22. void CALLBACK moonSubtract(void);
  23. void CALLBACK moonOrbitAdd(void);
  24. void CALLBACK moonOrbitSubtract(void);
  25. void CALLBACK myReshape(GLsizei w, GLsizei h);
  26.  
  27. static int year = 0, day = 0, tidalLock = 0, moonDay = 0;
  28.  
  29. void CALLBACK dayAdd(void)
  30. {
  31.     day = (day + 10) % 360;
  32. }
  33.  
  34. void CALLBACK daySubtract(void)
  35. {
  36.     day = (day - 10) % 360;
  37. }
  38.  
  39. void CALLBACK yearAdd(void)
  40. {
  41.     year = (year + 5) % 360;
  42.     day = (day + 2) % 360;
  43.     tidalLock = (tidalLock - 4) % 360;
  44.     moonDay = (moonDay + 4) % 360;
  45. }
  46.  
  47. void CALLBACK yearSubtract(void)
  48. {
  49.     year = (year - 5) % 360;
  50. }
  51.  
  52. void CALLBACK moonAdd(void)
  53. {
  54.     tidalLock = (tidalLock + 5) % 360;
  55. }
  56.  
  57. void CALLBACK moonSubtract(void)
  58. {
  59.     tidalLock = (tidalLock - 5) % 360;
  60. }
  61.  
  62. void CALLBACK moonOrbitAdd(void)
  63. {
  64.     moonDay = (moonDay + 1) % 360;
  65. }
  66.  
  67. void CALLBACK moonOrbitSubtract(void)
  68. {
  69.     moonDay = (moonDay - 1) % 360;
  70. }
  71.  
  72.  
  73. void CALLBACK display(void)
  74. {
  75.     glClear(GL_COLOR_BUFFER_BIT);
  76.  
  77.     glColor3f(1.0, 1.0, 1.0);
  78.     glPushMatrix();//pentru a nu iesi obiectele din fereastra la reapelarea functiei display()
  79.  
  80.     /*  SOARELE    */
  81.     auxWireSphere(1.0);
  82.  
  83.     /*  Pamantul */
  84.     glRotatef((GLfloat)year, 0.0, 1.0, 0.0);
  85.     glTranslatef(2.0, 0.0, 0.0);
  86.     glRotatef((GLfloat)day, 0.0, 1.0, 0.0);
  87.     auxWireSphere(0.2);
  88.  
  89.     /* Luna */
  90.     glRotatef((GLfloat)((year + tidalLock) % 360), 0.0, 1.0, 0.0);
  91.     glTranslatef(0.8, 0.0, 0.0);
  92.     glRotatef((GLfloat)((day + moonDay) % 360), 0.0, 1.0, 0.0);
  93.     auxWireSphere(0.08);
  94.  
  95.     glPopMatrix();
  96.     glFlush();
  97. }
  98.  
  99. void myinit(void) {
  100.     glShadeModel(GL_FLAT);
  101. }
  102.  
  103. void CALLBACK myReshape(GLsizei w, GLsizei h)
  104. {
  105.     if (!h) return;
  106.     glViewport(0, 0, w, h);
  107.     glMatrixMode(GL_PROJECTION);
  108.     glLoadIdentity();
  109.     gluPerspective(60.0, (GLfloat)w / (GLfloat)h, 1.0, 20.0);
  110.     glMatrixMode(GL_MODELVIEW);
  111.     glLoadIdentity();
  112.     glTranslatef(0.0, 0.0, -5.0);
  113. }
  114.  
  115.  
  116. int main(int argc, char** argv)
  117. {
  118.     auxInitDisplayMode(AUX_SINGLE | AUX_RGB);
  119.     auxInitPosition(0, 0, 500, 500);
  120.     auxInitWindow("Composite Modeling Transformations");
  121.     myinit();
  122.     auxKeyFunc(AUX_LEFT, yearSubtract);
  123.     auxKeyFunc(AUX_RIGHT, yearAdd);
  124.     auxKeyFunc(AUX_UP, dayAdd);
  125.     auxKeyFunc(AUX_DOWN, daySubtract);
  126.  
  127.     auxKeyFunc(AUX_w, moonAdd);
  128.     auxKeyFunc(AUX_s, moonSubtract);
  129.     auxKeyFunc(AUX_a, moonOrbitSubtract);
  130.     auxKeyFunc(AUX_d, moonOrbitAdd);
  131.  
  132.     auxReshapeFunc(myReshape);
  133.     auxMainLoop(display);
  134.     return(0);
  135. }
  136.  
Add Comment
Please, Sign In to add comment