Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <windows.h>
- #include <gl/gl.h>
- #include <gl/glut.h>
- #include <array>
- #include <math.h>
- #include <cstdlib>
- #include <ctime>
- typedef float point3[3];
- float colorsTable[18];
- static GLfloat theta[] = { 0.0, 0.0, 0.0 };
- void spinEgg()
- {
- theta[0] -= 0.01;
- if (theta[0] > 360.0) theta[0] -= 360.0;
- theta[1] -= 0.01;
- if (theta[1] > 360.0) theta[1] -= 360.0;
- theta[2] -= 0.01;
- if (theta[2] > 360.0) theta[2] -= 360.0;
- glutPostRedisplay();
- }
- void Colors()
- {
- for (int i = 0; i < 18; i++)
- {
- colorsTable[i] = (rand() % 100) / 100.0f;
- }
- }
- void Axes(void)
- {
- point3 x_min = { -5.0, 0.0, 0.0 };
- point3 x_max = { 5.0, 0.0, 0.0 };
- // początek i koniec obrazu osi x
- point3 y_min = { 0.0, -5.0, 0.0 };
- point3 y_max = { 0.0, 5.0, 0.0 };
- // początek i koniec obrazu osi y
- point3 z_min = { 0.0, 0.0, -5.0 };
- point3 z_max = { 0.0, 0.0, 5.0 };
- // początek i koniec obrazu osi y
- glColor3f(1.0f, 0.0f, 0.0f); // kolor rysowania osi - czerwony
- glBegin(GL_LINES); // rysowanie osi x
- glVertex3fv(x_min);
- glVertex3fv(x_max);
- glEnd();
- glColor3f(0.0f, 1.0f, 0.0f); // kolor rysowania - zielony
- glBegin(GL_LINES); // rysowanie osi y
- glVertex3fv(y_min);
- glVertex3fv(y_max);
- glEnd();
- glColor3f(0.0f, 0.0f, 1.0f); // kolor rysowania - niebieski
- glBegin(GL_LINES); // rysowanie osi z
- glVertex3fv(z_min);
- glVertex3fv(z_max);
- glEnd();
- }
- void Egg()
- {
- int n = 20;
- float u, v;
- float table[20][20][3];
- for (int i = 0; i < n; i++)
- {
- for (int j = 0; j < n; j++)
- {
- v = (float)i / (n - 1);
- u = (float)j / (n - 1);
- table[i][j][0] = (float)(cos(3.14 * v) * (-90 * pow(u, 5) + 225 * pow(u, 4) - 270 * pow(u, 3) + 180 * pow(u, 2) - 45 * u));
- table[i][j][1] = (float)(160 * pow(u, 4) - 320 * pow(u, 3) + 160 * pow(u, 2));
- table[i][j][2] = (float)(sin(3.14 * v) * (-90 * pow(u, 5) + 225 * pow(u, 4) - 270 * pow(u, 3) + 180 * pow(u, 2) - 45 * u));
- }
- }
- glRotated(0, 1, 1, 1);
- glBegin(GL_POINTS);
- glColor3f(1.0, 1.0, 1.0);
- for (int i = 0; i < n; i++)
- {
- for (int j = 0; j < n; j++)
- {
- glVertex3f(table[i][j][0], table[i][j][1] - 5, table[i][j][2]);
- }
- }
- glEnd();
- }
- void EggNet()
- {
- int n = 20;
- float u, v;
- float table[20][20][3];
- for (int i = 0; i < n; i++)
- {
- for (int j = 0; j < n; j++)
- {
- v = (float)i / (n - 1);
- u = (float)j / (n - 1);
- table[i][j][0] = (float)(cos(3.14 * v) * (-90 * pow(u, 5) + 225 * pow(u, 4) - 270 * pow(u, 3) + 180 * pow(u, 2) - 45 * u));
- table[i][j][1] = (float)(160 * pow(u, 4) - 320 * pow(u, 3) + 160 * pow(u, 2));
- table[i][j][2] = (float)(sin(3.14 * v) * (-90 * pow(u, 5) + 225 * pow(u, 4) - 270 * pow(u, 3) + 180 * pow(u, 2) - 45 * u));
- }
- }
- glRotated(0, 1, 1, 1);
- glBegin(GL_LINES);
- glColor3f(1.0, 1.0, 1.0);
- for (int i = 0; i < n - 1; i++)
- {
- for (int j = 0; j < n - 1; j++)
- {
- glVertex3f(table[i][j][0], table[i][j][1] - 5, table[i][j][2]);
- glVertex3f(table[i][j + 1][0], table[i][j + 1][1] - 5, table[i][j + 1][2]);
- glVertex3f(table[i][j][0], table[i][j][1] - 5, table[i][j][2]);
- glVertex3f(table[i + 1][j][0], table[i + 1][j][1] - 5, table[i + 1][j][2]);
- glVertex3f(table[i][j][0], table[i][j][1] - 5, table[i][j][2]);
- glVertex3f(table[i + 1][j + 1][0], table[i + 1][j + 1][1] - 5, table[i + 1][j + 1][2]);
- }
- }
- glEnd();
- }
- void EggTriangles()
- {
- int n = 20;
- float u, v;
- float table[20][20][3];
- for (int i = 0; i < n; i++)
- {
- for (int j = 0; j < n; j++)
- {
- v = (float)i / (n - 1);
- u = (float)j / (n - 1);
- table[i][j][0] = (float)(cos(3.14 * v) * (-90 * pow(u, 5) + 225 * pow(u, 4) - 270 * pow(u, 3) + 180 * pow(u, 2) - 45 * u));
- table[i][j][1] = (float)(160 * pow(u, 4) - 320 * pow(u, 3) + 160 * pow(u, 2));
- table[i][j][2] = (float)(sin(3.14 * v) * (-90 * pow(u, 5) + 225 * pow(u, 4) - 270 * pow(u, 3) + 180 * pow(u, 2) - 45 * u));
- }
- }
- glRotated(50, 1, 1, 1);
- glBegin(GL_TRIANGLES);
- glColor3f(1.0, 1.0, 1.0);
- for (int i = 0; i < n - 1; i++)
- {
- for (int j = 0; j < n - 1; j++)
- {
- glColor3f(colorsTable[0], colorsTable[1], colorsTable[2]);
- glVertex3f(table[i][j][0], table[i][j][1] - 5, table[i][j][2]);
- glColor3f(colorsTable[3], colorsTable[4], colorsTable[5]);
- glVertex3f(table[i][j + 1][0], table[i][j + 1][1] - 5, table[i][j + 1][2]);
- glVertex3f(table[i + 1][j + 1][0], table[i + 1][j + 1][1] - 5, table[i + 1][j + 1][2]);
- glVertex3f(table[i][j][0], table[i][j][1] - 5, table[i][j][2]);
- glVertex3f(table[i + 1][j][0], table[i + 1][j][1] - 5, table[i + 1][j][2]);
- glVertex3f(table[i + 1][j + 1][0], table[i + 1][j + 1][1] - 5, table[i + 1][j + 1][2]);
- }
- }
- glEnd();
- }
- void RenderScene(void)
- {
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- glLoadIdentity();
- Axes();
- glRotatef(theta[0], 1.0, 0.0, 0.0);
- glRotatef(theta[1], 0.0, 1.0, 0.0);
- glRotatef(theta[2], 0.0, 0.0, 1.0);
- EggNet();
- glFlush();
- glutSwapBuffers();
- }
- void ChangeSize(GLsizei horizontal, GLsizei vertical)
- {
- GLfloat AspectRatio;
- if (vertical == 0)
- vertical = 1;
- glViewport(0, 0, horizontal, vertical);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- AspectRatio = (GLfloat)horizontal / (GLfloat)vertical;
- if (horizontal <= vertical)
- glOrtho(-7.5, 7.5, -7.5 / AspectRatio, 7.5 / AspectRatio, 10.0, -10.0);
- else
- glOrtho(-7.5 * AspectRatio, 7.5 * AspectRatio, -7.5, 7.5, 10.0, -10.0);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- }
- void main(void)
- {
- srand(time(NULL));
- Colors();
- //glutIdleFunc(spinEgg);
- glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
- glutInitWindowSize(300, 300);
- Egg();
- glutCreateWindow("Zadanie 2");
- glutDisplayFunc(RenderScene);
- glutReshapeFunc(ChangeSize);
- glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
- glEnable(GL_DEPTH_TEST);
- glutMainLoop();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement