Advertisement
Guest User

Untitled

a guest
Dec 16th, 2019
227
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.12 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <Windows.h>
  3. #include "include\GL\GL.H"
  4. #include "include\GL\GLU.H"
  5. #include "include\GL\glut.h"
  6. #include <cmath>
  7.  
  8.  
  9. // position of first triangle for all of colors
  10. float blueT[3][2] = { {0.0,0.0}, {50.0,0.0}, {0.0, 50.0} };
  11. float greenT[3][2] = { {50.0,0.0}, {100.0,0.0}, {50.0, -50.0} };
  12. float orangeT[3][2] = { {50.0,0.0}, {100.0,0.0}, {50.0, 50.0} };
  13. float pinkT[3][2] = { {100.0,0.0}, {150.0,0.0}, {100.0, 50.0} };
  14. float yellowT[3][2] = { {50.0,50.0}, {50.0,100.0}, {100.0, 50.0} };
  15. float redT[3][2] = { {100.0,0.0}, {150.0,0.0}, {100.0, -50.0} };
  16.  
  17. int i = 0;
  18.  
  19. GLfloat angleX = 0.0;
  20. float shiftX = 0;
  21. float shiftY = 0;
  22. float shift = 1;
  23.  
  24. void setColor(int color) {
  25. switch (color)
  26. {
  27. case 1:
  28. glColor4f(0.0f, 0.0f, 1.0f, 1.0f); //blue
  29. break;
  30. case 2:
  31. glColor4f(1.0f, 0.0f, 0.0f, 1.0f); //red
  32. break;
  33. case 3:
  34. glColor4f(0.0f, 1.0f, 0.0f, 1.0f); //green
  35. break;
  36.  
  37. case 4:
  38. glColor4f(1.0f, 1.0f, 0.0f, 1.0f); //yellow
  39. break;
  40.  
  41. case 5:
  42. glColor4f(1.0f, 0.0f, 1.0f, 1.0f); //pink
  43. break;
  44.  
  45. case 6:
  46. glColor4f(1.0f, 0.65f, 0.0f, 1.0f); //orange
  47. break;
  48. }
  49. }
  50.  
  51. void timer(int value) {
  52. angleX -= shift;
  53. if (angleX < -360) {
  54. angleX = 0;
  55. shiftX = 0;
  56. shiftY = 0;
  57. }
  58. if (angleX >= -180) {
  59. shiftX += shift;
  60. shiftY += shift;
  61. }
  62. else{
  63. shiftX -= shift;
  64. shiftY -= shift;
  65. }
  66. glutPostRedisplay();
  67. glutTimerFunc(20, timer, 0);
  68. }
  69.  
  70. float getParameterA(float triangle[3][2]) {
  71. GLfloat centerX = (triangle[0][0] + triangle[1][0] + triangle[2][0]) / 3;
  72. GLfloat centerY = (triangle[0][1] + triangle[1][1] + triangle[2][1]) / 3;
  73. float a = centerY / centerX;
  74. return a;
  75. }
  76.  
  77. void drawTriangle(float xy[3][2], int color) {
  78. glBegin(GL_TRIANGLES);
  79. setColor(color);
  80. glVertex2f(xy[0][0], xy[0][1]);
  81. glVertex2f(xy[1][0], xy[1][1]);
  82. glVertex2f(xy[2][0], xy[2][1]);
  83. glEnd();
  84. }
  85.  
  86. // obrot wokol wlasnego srodka ciezkosci trojkata
  87. void rotateTriangle(float angle, float x, float y, float triangle[3][2]) {
  88. GLfloat avgX = (triangle[0][0] + triangle[1][0] + triangle[2][0]) / 3;
  89. GLfloat avgY = (triangle[0][1] + triangle[1][1] + triangle[2][1]) / 3;
  90. glTranslatef(avgX, avgY, 0);
  91. glTranslatef(x, y, 0);
  92. glRotatef(angle, 0, 0, 1);
  93. glTranslatef(-avgX, -avgY, 0);
  94. }
  95.  
  96. void drawMultipleTriangles(float angleCircle, float angleTriangle, float x, float y, float triangle[3][2], int color) {
  97. glPushMatrix();
  98. i = 0;
  99. glRotatef(angleCircle, 0, 0, 1);
  100. while(i <= 360) {
  101. i += 90;
  102. glPushMatrix();
  103. glRotatef(i, 0, 0, 1);
  104. glPushMatrix();
  105. rotateTriangle(angleTriangle, x, y, triangle);
  106. drawTriangle(triangle, color);
  107. glPopMatrix();
  108. glPopMatrix();
  109. }
  110. glPopMatrix();
  111. }
  112.  
  113. void showTrangles() {
  114. drawMultipleTriangles(0, -0 * 2, shiftX, getParameterA(blueT) * shiftX, blueT, 1);
  115. drawMultipleTriangles(0, -0 * 2, shiftX, getParameterA(redT) * shiftX, redT, 2);
  116. drawMultipleTriangles(-0, 0 * 2, shiftX, getParameterA(greenT) * shiftX, greenT, 3);
  117. drawMultipleTriangles(0, -0 * 2, shiftX, getParameterA(yellowT) * shiftX, yellowT, 4);
  118. drawMultipleTriangles(0, -0 * 2, shiftX, getParameterA(pinkT) * shiftX, pinkT, 5);
  119. drawMultipleTriangles(-0, 0 * 2, shiftX, getParameterA(orangeT) * shiftX, orangeT, 6);
  120. }
  121.  
  122. void MyDisplay(void) {
  123. // The new scene
  124. glLoadIdentity();
  125. glClear(GL_COLOR_BUFFER_BIT);
  126. showTrangles();
  127. glFlush();//start processing buffered OpenGL routines
  128. }
  129.  
  130. void MyInit(void) {
  131. glClearColor(0.0, 0.0, 0.0, 0.0);//select clearing (background) color
  132. /* initialize viewing values */
  133. glViewport(0, 0, 800, 800);//window origin and size
  134. glMatrixMode(GL_PROJECTION);//
  135. glLoadIdentity();//=1
  136. gluOrtho2D(-400, 400, -400, 400);
  137. glMatrixMode(GL_MODELVIEW);
  138. glLoadIdentity();//=1
  139. }
  140.  
  141. int main(int argc, char** argv) {
  142. glutInit(&argc, argv);
  143. glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);//single buffer and RGBA
  144. glutInitWindowSize(800, 800);//initial window size
  145. glutInitWindowPosition(100, 100);
  146. glutCreateWindow("My window");//create widnow, hello title bar
  147. MyInit();
  148. glutDisplayFunc(MyDisplay);//
  149. glutTimerFunc(0, timer, 0);
  150. glutMainLoop();//enter main loop and process events
  151. return 0;
  152. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement