Advertisement
Guest User

Untitled

a guest
Dec 18th, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.29 KB | None | 0 0
  1. void RysowanieCzerwony(Point A, float sideLength)
  2. {
  3.     glBegin(GL_POLYGON);
  4.     glColor3f(1.0f, 0.0f, 0.0f);
  5.     glVertex3f(A.x, A.y, A.z);
  6.     glVertex3f(A.x + sideLength, A.y, A.z);
  7.     glVertex3f(A.x + sideLength, A.y, A.z + sideLength);
  8.     glVertex3f(A.x, A.y, A.z + sideLength);
  9.     glEnd();
  10.     glBegin(GL_TRIANGLES);
  11.     glColor3f(0.9f, 0.0f, 0.0f);
  12.     glVertex3f(A.x, A.y, A.z);
  13.     glVertex3f(A.x + (sideLength / 2.0), A.y + sqrt(sideLength*(sideLength / 2.0)), A.z + (sideLength / 2.0));
  14.     glVertex3f(A.x + sideLength, A.y, A.z);
  15.     glEnd();
  16.     glBegin(GL_TRIANGLES);
  17.     glColor3f(0.8f, 0.0f, 0.0f);
  18.     glVertex3f(A.x + sideLength, A.y, A.z);
  19.     glVertex3f(A.x + (sideLength / 2.0), A.y + sqrt(sideLength*(sideLength / 2.0)), A.z + (sideLength / 2.0));
  20.     glVertex3f(A.x + sideLength, A.y, A.z + sideLength);
  21.     glEnd();
  22.     glBegin(GL_TRIANGLES);
  23.     glColor3f(0.7f, 0.0f, 0.0f);
  24.     glVertex3f(A.x + sideLength, A.y, A.z + sideLength);
  25.     glVertex3f(A.x + (sideLength / 2.0), A.y + sqrt(sideLength*(sideLength / 2.0)), A.z + (sideLength / 2.0));
  26.     glVertex3f(A.x, A.y, A.z + sideLength);
  27.     glEnd();
  28.     glBegin(GL_TRIANGLES);
  29.     glColor3f(0.6f, 0.0f, 0.0f);
  30.     glVertex3f(A.x, A.y, A.z + sideLength);
  31.     glVertex3f(A.x + (sideLength / 2.0), A.y + sqrt(sideLength*(sideLength / 2.0)), A.z + (sideLength / 2.0));
  32.     glVertex3f(A.x, A.y, A.z);
  33.     glEnd();
  34.  
  35.  
  36.     glBegin(GL_LINE_STRIP);
  37.     glColor3f(0.0f, 0.0f, 1.0f);
  38.     glVertex3f(A.x, A.y, A.z);
  39.     glVertex3f(A.x + sideLength, A.y, A.z);
  40.     glVertex3f(A.x + sideLength, A.y, A.z + sideLength);
  41.     glVertex3f(A.x, A.y, A.z + sideLength);
  42.     glVertex3f(A.x, A.y, A.z);
  43.     glEnd();
  44.     glBegin(GL_LINES);
  45.     glColor3f(0.0f, 0.0f, 1.0f);
  46.     glVertex3f(A.x, A.y, A.z);
  47.     glVertex3f(A.x + (sideLength / 2.0), A.y + sqrt(sideLength*(sideLength / 2.0)), A.z + (sideLength / 2.0));
  48.     glEnd();
  49.     glBegin(GL_LINES);
  50.     glColor3f(0.0f, 0.0f, 1.0f);
  51.     glVertex3f(A.x + sideLength, A.y, A.z);
  52.     glVertex3f(A.x + (sideLength / 2.0), A.y + sqrt(sideLength*(sideLength / 2.0)), A.z + (sideLength / 2.0));
  53.     glEnd();
  54.     glBegin(GL_LINES);
  55.     glColor3f(0.0f, 0.0f, 1.0f);
  56.     glVertex3f(A.x, A.y, A.z + sideLength);
  57.     glVertex3f(A.x + (sideLength / 2.0), A.y + sqrt(sideLength*(sideLength / 2.0)), A.z + (sideLength / 2.0));
  58.     glEnd();
  59.     glBegin(GL_LINES);
  60.     glColor3f(0.0f, 0.0f, 1.0f);
  61.     glVertex3f(A.x + sideLength, A.y, A.z + sideLength);
  62.     glVertex3f(A.x + (sideLength / 2.0), A.y + sqrt(sideLength*(sideLength / 2.0)), A.z + (sideLength / 2.0));
  63.     glEnd();
  64.  
  65. }
  66.  
  67.  
  68.  
  69.  
  70. void DrawSierpinski(Point A, float sideLength, int level)
  71. {
  72.     if (level >= maxLevel)
  73.     {
  74.         switch (model)
  75.         {
  76.         case 1:
  77.             RysowanieCzerwony(A, sideLength);
  78.             break;
  79.         case 2:
  80.             RysowanieNiebieski(A, sideLength);
  81.             break;
  82.         case 3:
  83.             RysowanieZielony(A, sideLength);
  84.             break;
  85.         case 4:
  86.             RysowanieFioletowy(A, sideLength);
  87.             break;
  88.         default:
  89.             break;
  90.         }
  91.  
  92.  
  93.     }
  94.     else
  95.     {
  96.         sideLength = sideLength / 2.0;
  97.         level += 1;
  98.         DrawSierpinski(A, sideLength, level);
  99.         A.x += sideLength;
  100.         DrawSierpinski(A, sideLength, level);
  101.         A.x -= sideLength;
  102.         A.z += sideLength;
  103.         DrawSierpinski(A, sideLength, level);
  104.         A.x += sideLength;
  105.         DrawSierpinski(A, sideLength, level);
  106.         A.x -= sideLength;
  107.         A.z -= sideLength;
  108.         A.y += sqrt(sideLength*(sideLength / 2.0));
  109.         A.x += (sideLength / 2.0);
  110.         A.z += (sideLength / 2.0);
  111.         DrawSierpinski(A, sideLength, level);
  112.     }
  113.  
  114. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement