Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void RysowanieCzerwony(Point A, float sideLength)
- {
- glBegin(GL_POLYGON);
- glColor3f(1.0f, 0.0f, 0.0f);
- glVertex3f(A.x, A.y, A.z);
- glVertex3f(A.x + sideLength, A.y, A.z);
- glVertex3f(A.x + sideLength, A.y, A.z + sideLength);
- glVertex3f(A.x, A.y, A.z + sideLength);
- glEnd();
- glBegin(GL_TRIANGLES);
- glColor3f(0.9f, 0.0f, 0.0f);
- glVertex3f(A.x, A.y, A.z);
- glVertex3f(A.x + (sideLength / 2.0), A.y + sqrt(sideLength*(sideLength / 2.0)), A.z + (sideLength / 2.0));
- glVertex3f(A.x + sideLength, A.y, A.z);
- glEnd();
- glBegin(GL_TRIANGLES);
- glColor3f(0.8f, 0.0f, 0.0f);
- glVertex3f(A.x + sideLength, A.y, A.z);
- glVertex3f(A.x + (sideLength / 2.0), A.y + sqrt(sideLength*(sideLength / 2.0)), A.z + (sideLength / 2.0));
- glVertex3f(A.x + sideLength, A.y, A.z + sideLength);
- glEnd();
- glBegin(GL_TRIANGLES);
- glColor3f(0.7f, 0.0f, 0.0f);
- glVertex3f(A.x + sideLength, A.y, A.z + sideLength);
- glVertex3f(A.x + (sideLength / 2.0), A.y + sqrt(sideLength*(sideLength / 2.0)), A.z + (sideLength / 2.0));
- glVertex3f(A.x, A.y, A.z + sideLength);
- glEnd();
- glBegin(GL_TRIANGLES);
- glColor3f(0.6f, 0.0f, 0.0f);
- glVertex3f(A.x, A.y, A.z + sideLength);
- glVertex3f(A.x + (sideLength / 2.0), A.y + sqrt(sideLength*(sideLength / 2.0)), A.z + (sideLength / 2.0));
- glVertex3f(A.x, A.y, A.z);
- glEnd();
- glBegin(GL_LINE_STRIP);
- glColor3f(0.0f, 0.0f, 1.0f);
- glVertex3f(A.x, A.y, A.z);
- glVertex3f(A.x + sideLength, A.y, A.z);
- glVertex3f(A.x + sideLength, A.y, A.z + sideLength);
- glVertex3f(A.x, A.y, A.z + sideLength);
- glVertex3f(A.x, A.y, A.z);
- glEnd();
- glBegin(GL_LINES);
- glColor3f(0.0f, 0.0f, 1.0f);
- glVertex3f(A.x, A.y, A.z);
- glVertex3f(A.x + (sideLength / 2.0), A.y + sqrt(sideLength*(sideLength / 2.0)), A.z + (sideLength / 2.0));
- glEnd();
- glBegin(GL_LINES);
- glColor3f(0.0f, 0.0f, 1.0f);
- glVertex3f(A.x + sideLength, A.y, A.z);
- glVertex3f(A.x + (sideLength / 2.0), A.y + sqrt(sideLength*(sideLength / 2.0)), A.z + (sideLength / 2.0));
- glEnd();
- glBegin(GL_LINES);
- glColor3f(0.0f, 0.0f, 1.0f);
- glVertex3f(A.x, A.y, A.z + sideLength);
- glVertex3f(A.x + (sideLength / 2.0), A.y + sqrt(sideLength*(sideLength / 2.0)), A.z + (sideLength / 2.0));
- glEnd();
- glBegin(GL_LINES);
- glColor3f(0.0f, 0.0f, 1.0f);
- glVertex3f(A.x + sideLength, A.y, A.z + sideLength);
- glVertex3f(A.x + (sideLength / 2.0), A.y + sqrt(sideLength*(sideLength / 2.0)), A.z + (sideLength / 2.0));
- glEnd();
- }
- void DrawSierpinski(Point A, float sideLength, int level)
- {
- if (level >= maxLevel)
- {
- switch (model)
- {
- case 1:
- RysowanieCzerwony(A, sideLength);
- break;
- case 2:
- RysowanieNiebieski(A, sideLength);
- break;
- case 3:
- RysowanieZielony(A, sideLength);
- break;
- case 4:
- RysowanieFioletowy(A, sideLength);
- break;
- default:
- break;
- }
- }
- else
- {
- sideLength = sideLength / 2.0;
- level += 1;
- DrawSierpinski(A, sideLength, level);
- A.x += sideLength;
- DrawSierpinski(A, sideLength, level);
- A.x -= sideLength;
- A.z += sideLength;
- DrawSierpinski(A, sideLength, level);
- A.x += sideLength;
- DrawSierpinski(A, sideLength, level);
- A.x -= sideLength;
- A.z -= sideLength;
- A.y += sqrt(sideLength*(sideLength / 2.0));
- A.x += (sideLength / 2.0);
- A.z += (sideLength / 2.0);
- DrawSierpinski(A, sideLength, level);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement