diff --git a/Gl_template.c.DONTCOMPILE b/Gl_template.c.DONTCOMPILE new file mode 100644 index 0000000..ebb0b49 --- /dev/null +++ b/Gl_template.c.DONTCOMPILE @@ -0,0 +1,1514 @@ +// Gl_template.c +//Wyłączanie błędów przed "fopen" +#define _CRT_SECURE_NO_WARNINGS + + + +// Ładowanie bibliotek: + +#ifdef _MSC_VER // Check if MS Visual C compiler +# pragma comment(lib, "opengl32.lib") // Compiler-specific directive to avoid manually configuration +# pragma comment(lib, "glu32.lib") // Link libraries +#endif + + + + +// Ustalanie trybu tekstowego: +#ifdef _MSC_VER // Check if MS Visual C compiler +# ifndef _MBCS +# define _MBCS // Uses Multi-byte character set +# endif +# ifdef _UNICODE // Not using Unicode character set +# undef _UNICODE +# endif +# ifdef UNICODE +# undef UNICODE +# endif +#endif +#include // Window defines +#include // OpenGL +#include // GLU library +#include // Define for sqrt +#include +#include "resource.h" // About box resource identifiers. + +#define glRGB(x, y, z) glColor3ub((GLubyte)x, (GLubyte)y, (GLubyte)z) +#define BITMAP_ID 0x4D42 // identyfikator formatu BMP +#define GL_PI 3.1415 + +// Color Palette handle +HPALETTE hPalette = NULL; + +// Application name and instance storeage +static LPCTSTR lpszAppName = "GL Template"; +static HINSTANCE hInstance; + +// Rotation amounts +static GLfloat xRot = 0.0f; +static GLfloat yRot = 0.0f; +static GLfloat zRot = 0.0f; + + +static GLsizei lastHeight; +static GLsizei lastWidth; + +// Opis tekstury +BITMAPINFOHEADER bitmapInfoHeader; // nagłówek obrazu +unsigned char* bitmapData; // dane tekstury +unsigned int texture[2]; // obiekt tekstury + + +// Declaration for Window procedure +LRESULT CALLBACK WndProc( HWND hWnd, + UINT message, + WPARAM wParam, + LPARAM lParam); + +// Dialog procedure for about box +BOOL APIENTRY AboutDlgProc (HWND hDlg, UINT message, UINT wParam, LONG lParam); + +// Set Pixel Format function - forward declaration +void SetDCPixelFormat(HDC hDC); + +float KRAWEDZ = 20.0f; +float PI = 3.1415f; + +// Reduces a normal vector specified as a set of three coordinates, +// to a unit normal vector of length one. +void ReduceToUnit(float vector[3]) + { + float length; + + // Calculate the length of the vector + length = (float)sqrt((vector[0]*vector[0]) + + (vector[1]*vector[1]) + + (vector[2]*vector[2])); + + // Keep the program from blowing up by providing an exceptable + // value for vectors that may calculated too close to zero. + if(length == 0.0f) + length = 1.0f; + + // Dividing each element by the length will result in a + // unit normal vector. + vector[0] /= length; + vector[1] /= length; + vector[2] /= length; + } + + +// Points p1, p2, & p3 specified in counter clock-wise order +void calcNormal(float v[3][3], float out[3]) + { + float v1[3],v2[3]; + static const int x = 0; + static const int y = 1; + static const int z = 2; + + // Calculate two vectors from the three points + v1[x] = v[0][x] - v[1][x]; + v1[y] = v[0][y] - v[1][y]; + v1[z] = v[0][z] - v[1][z]; + + v2[x] = v[1][x] - v[2][x]; + v2[y] = v[1][y] - v[2][y]; + v2[z] = v[1][z] - v[2][z]; + + // Take the cross product of the two vectors to get + // the normal vector which will be stored in out + out[x] = v1[y]*v2[z] - v1[z]*v2[y]; + out[y] = v1[z]*v2[x] - v1[x]*v2[z]; + out[z] = v1[x]*v2[y] - v1[y]*v2[x]; + + // Normalize the vector (shorten length to one) + ReduceToUnit(out); + } + + + +// Change viewing volume and viewport. Called when window is resized +void ChangeSize(GLsizei w, GLsizei h) + { + GLfloat nRange = 100.0f; + GLfloat fAspect; + // Prevent a divide by zero + if(h == 0) + h = 1; + + lastWidth = w; + lastHeight = h; + + fAspect=(GLfloat)w/(GLfloat)h; + // Set Viewport to window dimensions + glViewport(0, 0, w, h); + + // Reset coordinate system + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + + // Establish clipping volume (left, right, bottom, top, near, far) + if (w <= h) + glOrtho (-nRange, nRange, -nRange*h/w, nRange*h/w, -nRange, nRange); + else + glOrtho (-nRange*w/h, nRange*w/h, -nRange, nRange, -nRange, nRange); + + // Establish perspective: + /* + gluPerspective(60.0f,fAspect,1.0,400); + */ + + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); +} + + + +// This function does any needed initialization on the rendering +// context. Here it sets up and initializes the lighting for +// the scene. +void SetupRC() + { + // Light values and coordinates + //GLfloat ambientLight[] = { 0.3f, 0.3f, 0.3f, 1.0f }; + //GLfloat diffuseLight[] = { 0.7f, 0.7f, 0.7f, 1.0f }; + //GLfloat specular[] = { 1.0f, 1.0f, 1.0f, 1.0f}; + //GLfloat lightPos[] = { 0.0f, 150.0f, 150.0f, 1.0f }; + //GLfloat specref[] = { 1.0f, 1.0f, 1.0f, 1.0f }; + + + glEnable(GL_DEPTH_TEST); // Hidden surface removal + glFrontFace(GL_CCW); // Counter clock-wise polygons face out + //glEnable(GL_CULL_FACE); // Do not calculate inside of jet + + // Enable lighting + //glEnable(GL_LIGHTING); + + // Setup and enable light 0 + //glLightfv(GL_LIGHT0,GL_AMBIENT,ambientLight); + //glLightfv(GL_LIGHT0,GL_DIFFUSE,diffuseLight); + //glLightfv(GL_LIGHT0,GL_SPECULAR,specular); + //glLightfv(GL_LIGHT0,GL_POSITION,lightPos); + //glEnable(GL_LIGHT0); + + // Enable color tracking + //glEnable(GL_COLOR_MATERIAL); + + // Set Material properties to follow glColor values + //glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE); + + // All materials hereafter have full specular reflectivity + // with a high shine + //glMaterialfv(GL_FRONT, GL_SPECULAR,specref); + //glMateriali(GL_FRONT,GL_SHININESS,128); + + + // White background + glClearColor(1.0f, 1.0f, 1.0f, 1.0f ); + // Black brush + glColor3f(0.0,0.0,0.0); +} + +void skrzynka(void) +{ + glColor3d(0.8,0.7,0.3); + + + glEnable(GL_TEXTURE_2D); // Włącz teksturowanie + + glBindTexture(GL_TEXTURE_2D,texture[0]); + glBegin(GL_QUADS); + glNormal3d(0,0,1); + glTexCoord2d(1.0,1.0); glVertex3d(25,25,25); + glTexCoord2d(0.0,1.0); glVertex3d(-25,25,25); + glTexCoord2d(0.0,0.0); glVertex3d(-25,-25,25); + glTexCoord2d(1.0,0.0); glVertex3d(25,-25,25); + glEnd(); + glBindTexture(GL_TEXTURE_2D,texture[1]); + glBegin(GL_QUADS); + glNormal3d(1,0,0); + glTexCoord2d(1.0,1.0); glVertex3d(25,25,25); + glTexCoord2d(0.0,1.0); glVertex3d(25,-25,25); + glTexCoord2d(0.0,0.0); glVertex3d(25,-25,-25); + glTexCoord2d(1.0,0.0); glVertex3d(25,25,-25); + glEnd(); + + glDisable(GL_TEXTURE_2D); // Wyłącz teksturowanie + + + + glBegin(GL_QUADS); + glNormal3d(0,0,-1); + glVertex3d(25,25,-25); + glVertex3d(25,-25,-25); + glVertex3d(-25,-25,-25); + glVertex3d(-25,25,-25); + + glNormal3d(-1,0,0); + glVertex3d(-25,25,-25); + glVertex3d(-25,-25,-25); + glVertex3d(-25,-25,25); + glVertex3d(-25,25,25); + + glNormal3d(0,1,0); + glVertex3d(25,25,25); + glVertex3d(25,25,-25); + glVertex3d(-25,25,-25); + glVertex3d(-25,25,25); + + glNormal3d(0,-1,0); + glVertex3d(25,-25,25); + glVertex3d(-25,-25,25); + glVertex3d(-25,-25,-25); + glVertex3d(25,-25,-25); + glEnd(); +} + +void walec01(void) +{ +GLUquadricObj*obj; +obj=gluNewQuadric(); +gluQuadricNormals(obj,GLU_SMOOTH); +glColor3d(1,0,0); +glPushMatrix(); +gluCylinder(obj,20,20,30,15,7); +gluCylinder(obj,0,20,0,15,7); +glTranslated(0,0,60); +glRotated(180.0,0,1,0); +gluCylinder(obj,0,20,30,15,7); +glPopMatrix(); +} + +void kula(void) +{ GLUquadricObj*obj; + obj=gluNewQuadric(); + gluQuadricTexture(obj,GL_TRUE); + glBindTexture(GL_TEXTURE_2D,texture[0]); + glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE); + glColor3d(1.0,0.8,0.8); + glEnable(GL_TEXTURE_2D); + gluSphere(obj,40,15,7); + glDisable(GL_TEXTURE_2D); +} + + + + +// LoadBitmapFile +// opis: ładuje mapę bitową z pliku i zwraca jej adres. +// Wypełnia strukturę nagłówka. +// Nie obsługuje map 8-bitowych. +unsigned char *LoadBitmapFile(char *filename, BITMAPINFOHEADER *bitmapInfoHeader) +{ + FILE *filePtr; // wskaźnik pozycji pliku + BITMAPFILEHEADER bitmapFileHeader; // nagłówek pliku + unsigned char *bitmapImage; // dane obrazu + int imageIdx = 0; // licznik pikseli + unsigned char tempRGB; // zmienna zamiany składowych + + // otwiera plik w trybie "read binary" + filePtr = fopen(filename, "rb"); + if (filePtr == NULL) + return NULL; + + // wczytuje nagłówek pliku + fread(&bitmapFileHeader, sizeof(BITMAPFILEHEADER), 1, filePtr); + + // sprawdza, czy jest to plik formatu BMP + if (bitmapFileHeader.bfType != BITMAP_ID) + { + fclose(filePtr); + return NULL; + } + + // wczytuje nagłówek obrazu + fread(bitmapInfoHeader, sizeof(BITMAPINFOHEADER), 1, filePtr); + + // ustawia wskaźnik pozycji pliku na początku danych obrazu + fseek(filePtr, bitmapFileHeader.bfOffBits, SEEK_SET); + + // przydziela pamięć buforowi obrazu + bitmapImage = (unsigned char*)malloc(bitmapInfoHeader->biSizeImage); + + // sprawdza, czy udało się przydzielić pamięć + if (!bitmapImage) + { + free(bitmapImage); + fclose(filePtr); + return NULL; + } + + // wczytuje dane obrazu + fread(bitmapImage, 1, bitmapInfoHeader->biSizeImage, filePtr); + + // sprawdza, czy dane zostały wczytane + if (bitmapImage == NULL) + { + fclose(filePtr); + return NULL; + } + + // zamienia miejscami składowe R i B + for (imageIdx = 0; imageIdx < bitmapInfoHeader->biSizeImage; imageIdx+=3) + { + tempRGB = bitmapImage[imageIdx]; + bitmapImage[imageIdx] = bitmapImage[imageIdx + 2]; + bitmapImage[imageIdx + 2] = tempRGB; + } + + // zamyka plik i zwraca wskaźnik bufora zawierającego wczytany obraz + fclose(filePtr); + return bitmapImage; +} + +float deg2rad(int degrees) { + return degrees % 360 * PI / 180.0f; +} + +int variable2 = 45; +int variable3 = 0; +int polygonmode = 0; +int iloscwarstw = 5; +int ilosccegiel = 3; +int variableIndex = 0; +float variableDegrees[] = {0, 30, 60, 90}; +float D_x = 0.0f; +float D_y = 10.0f; + +void szescian(void) +{ + // glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + { + // Parametry wierzcholkow + + GLfloat sa[3] = { 0.0f, 0.0f, 0.0f }; + GLfloat sb[3] = { KRAWEDZ, 0.0f, 0.0f }; + GLfloat sc[3] = { KRAWEDZ, KRAWEDZ, 0.0f }; + GLfloat sd[3] = { 0.0f, KRAWEDZ, 0.0f }; + GLfloat se[3] = { 0.0f, 0.0f, -KRAWEDZ }; + GLfloat sf[3] = { KRAWEDZ, 0.0f, -KRAWEDZ }; + GLfloat sg[3] = { KRAWEDZ, KRAWEDZ, -KRAWEDZ }; + GLfloat sh[3] = { 0.0f, KRAWEDZ, -KRAWEDZ }; + + // Sciany skladowe + + switch (variable3){ + + case 0: + // 0. ściana czerwona + glColor3f(1.0f, 0.0f, 0.0f); + glBegin(GL_POLYGON); + glVertex3fv(sa); + glVertex3fv(sb); + glVertex3fv(sc); + glVertex3fv(sd); + glEnd(); + break; + + case 1: + // 1. (zakomentowana) ściana czerwona + // glColor3f(1.0f, 0.0f, 0.0f); + // glBegin(GL_POLYGON); + // glVertex3fv(sa); + // glVertex3fv(sb); + // glVertex3fv(sc); + // glVertex3fv(sd); + // glEnd(); + break; + + case 2: + + // 2. uniesiona ściana czerwona + glColor3f(1.0f, 0.0f, 0.0f); + glBegin(GL_POLYGON); + glVertex3f(0.0f, 0.0f, KRAWEDZ); + glVertex3f(KRAWEDZ, 0.0f, KRAWEDZ); + glVertex3f(KRAWEDZ, KRAWEDZ, KRAWEDZ); + glVertex3f(0.0f, KRAWEDZ, KRAWEDZ); + glEnd(); + break; + + case 3: + + // 3. ściana czerwona przesunięta bokiem równolegle do płaszczyzny XY + glColor3f(1.0f, 0.0f, 0.0f); + glBegin(GL_POLYGON); + glVertex3f(0.0f + KRAWEDZ, 0.0f, 0.0f); + glVertex3f(KRAWEDZ + KRAWEDZ, 0.0f, 0.0f); + glVertex3f(KRAWEDZ + KRAWEDZ, KRAWEDZ, 0.0f); + glVertex3f(0.0f + KRAWEDZ, KRAWEDZ, 0.0f); + glEnd(); + break; + + case 4: + + // 4. "otwarte pudełko" do góry pod kątem 45 stopni + float pythagorean = KRAWEDZ * sin(deg2rad(45)); + glColor3f(1.0f, 0.0f, 0.0f); + glBegin(GL_POLYGON); + glVertex3f(0.0f, 0.0f, 0.0f); + glVertex3f(KRAWEDZ, 0.0f, 0.0f); + glVertex3f(KRAWEDZ, KRAWEDZ * cos(deg2rad(45)), KRAWEDZ * sin(deg2rad(45))); // punkt C + glVertex3f(0.0f, KRAWEDZ * cos(deg2rad(45)), KRAWEDZ * sin(deg2rad(45))); // punkt D + glEnd(); + break; + + case 5: + + // 5. "otwarte pudełko" bokiem pod kątem 45 stopni + float diagonal = KRAWEDZ * sqrt(2); + float katObrotu = deg2rad(variable2); + + // https://math.stackexchange.com/a/1385082 + // D_x = KRAWEDZ + (D_x - KRAWEDZ)*cos(deg2rad(1)) - (D_y - 0)*sin(deg2rad(1)); + // D_y = 0 + (D_x - KRAWEDZ)*sin(deg2rad(1)) + (D_y - 0)*cos(deg2rad(1)); + D_x = KRAWEDZ + (0 - KRAWEDZ)*cos(deg2rad(variable2)) - (KRAWEDZ - 0)*sin(deg2rad(variable2)); + D_y = 0 + (0 - KRAWEDZ)*sin(deg2rad(variable2)) + (KRAWEDZ - 0)*cos(deg2rad(variable2)); + + glColor3f(1.0f, 0.0f, 0.0f); + glBegin(GL_POLYGON); + glVertex3f(KRAWEDZ - KRAWEDZ * (float)cos(katObrotu), -(float)sin(katObrotu) * KRAWEDZ, 0.0f); // A + glVertex3f(KRAWEDZ, 0.0f, 0.0f); // B + glVertex3f(KRAWEDZ - KRAWEDZ * (float)sin(katObrotu), (float)cos(katObrotu) * KRAWEDZ, 0.0f); // C + glVertex3f(D_x, D_y, 0.0f); // D + glEnd(); + break; + + case 6: + + // 6. "otwarte pudełko" do góry pod kątami 0-30-60-90 stopni + float krawedz_sin = KRAWEDZ * sin(deg2rad(variableDegrees[variableIndex])); + float krawedz_cos = KRAWEDZ * cos(deg2rad(variableDegrees[variableIndex])); + glColor3f(1.0f, 0.0f, 0.0f); + glBegin(GL_POLYGON); + glVertex3f(0.0f, 0.0f, 0.0f); + glVertex3f(KRAWEDZ, 0.0f, 0.0f); + glVertex3f(KRAWEDZ, krawedz_cos, krawedz_sin); // punkt C + glVertex3f(0.0f, krawedz_cos, krawedz_sin); // punkt D + glEnd(); + break; + + default: + + // 1. ściana czerwona + glColor3f(1.0f, 0.0f, 0.0f); + glBegin(GL_POLYGON); + glVertex3fv(sa); + glVertex3fv(sb); + glVertex3fv(sc); + glVertex3fv(sd); + glEnd(); + + } + + glColor3f(0.0f, 1.0f, 0.0f); + glBegin(GL_POLYGON); + glVertex3fv(sb); + glVertex3fv(sf); + glVertex3fv(sg); + glVertex3fv(sc); + glEnd(); + + glColor3f(0.0f, 0.0f, 1.0f); + glBegin(GL_POLYGON); + glVertex3fv(sf); + glVertex3fv(se); + glVertex3fv(sh); + glVertex3fv(sg); + glEnd(); + + glColor3f(1.0f, 1.0f, 0.0f); + glBegin(GL_POLYGON); + glVertex3fv(se); + glVertex3fv(sa); + glVertex3fv(sd); + glVertex3fv(sh); + glEnd(); + + glColor3f(0.0f, 1.0f, 1.0f); + glBegin(GL_POLYGON); + glVertex3fv(sd); + glVertex3fv(sc); + glVertex3fv(sg); + glVertex3fv(sh); + glEnd(); + + glColor3f(1.0f, 0.0f, 1.0f); + glBegin(GL_POLYGON); + glVertex3fv(sa); + glVertex3fv(sb); + glVertex3fv(sf); + glVertex3fv(se); + glEnd(); + } +} + +void most(void) +{ + // glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + { + // Sciany skladowe + + // PRZÓD + glColor3f(0.5f, 0.5f, 0.5f); + glBegin(GL_TRIANGLES); + glVertex3f( 0.0f, 0.0f, 0.0f); + glVertex3f( 0.0f, 20.0f, 0.0f); + glVertex3f(20.0f, 20.0f, 0.0f); + glVertex3f( 0.0f, 0.0f, 0.0f); + glVertex3f(20.0f, 0.0f, 0.0f); + glVertex3f(20.0f, 20.0f, 0.0f); + glEnd(); + + glColor3f(0.5f, 0.5f, 0.5f); + glBegin(GL_TRIANGLES); + glVertex3f(60.0f, 0.0f, 0.0f); + glVertex3f(60.0f, 20.0f, 0.0f); + glVertex3f(80.0f, 20.0f, 0.0f); + glVertex3f(60.0f, 0.0f, 0.0f); + glVertex3f(80.0f, 0.0f, 0.0f); + glVertex3f(80.0f, 20.0f, 0.0f); + glEnd(); + + glColor3f(0.5f, 0.5f, 0.5f); + glBegin(GL_TRIANGLES); + glVertex3f( 0.0f, 20.0f, 0.0f); + glVertex3f( 0.0f, 40.0f, 0.0f); + glVertex3f(80.0f, 40.0f, 0.0f); + glVertex3f( 0.0f, 20.0f, 0.0f); + glVertex3f(80.0f, 20.0f, 0.0f); + glVertex3f(80.0f, 40.0f, 0.0f); + glEnd(); + + glColor3f(0.5f, 0.5f, 0.5f); + glBegin(GL_TRIANGLE_FAN); + glVertex3f(20.0f, 20.0f, 0.0f); + for (int i = -20; i < 0; i++){ + float koord_y = sqrt((20 - i) * (20 + i)); + glVertex3f(40.0f + i, koord_y, 0.0f); + } + glEnd(); + + glColor3f(0.5f, 0.5f, 0.5f); + glBegin(GL_TRIANGLE_FAN); + glVertex3f(60.0f, 20.0f, 0.0f); + for (int i = 20; i > 0; i--){ + float koord_y = sqrt((20 - i) * (20 + i)); + glVertex3f(40.0f + i, koord_y, 0.0f); + } + glEnd(); + + + // TYŁ + glColor3f(0.5f, 0.5f, 0.5f); + glBegin(GL_TRIANGLES); + glVertex3f( 0.0f, 0.0f, 20.0f); + glVertex3f( 0.0f, 20.0f, 20.0f); + glVertex3f(20.0f, 20.0f, 20.0f); + glVertex3f( 0.0f, 0.0f, 20.0f); + glVertex3f(20.0f, 0.0f, 20.0f); + glVertex3f(20.0f, 20.0f, 20.0f); + glEnd(); + + glColor3f(0.5f, 0.5f, 0.5f); + glBegin(GL_TRIANGLES); + glVertex3f(60.0f, 0.0f, 20.0f); + glVertex3f(60.0f, 20.0f, 20.0f); + glVertex3f(80.0f, 20.0f, 20.0f); + glVertex3f(60.0f, 0.0f, 20.0f); + glVertex3f(80.0f, 0.0f, 20.0f); + glVertex3f(80.0f, 20.0f, 20.0f); + glEnd(); + + glColor3f(0.5f, 0.5f, 0.5f); + glBegin(GL_TRIANGLES); + glVertex3f( 0.0f, 20.0f, 20.0f); + glVertex3f( 0.0f, 40.0f, 20.0f); + glVertex3f(80.0f, 40.0f, 20.0f); + glVertex3f( 0.0f, 20.0f, 20.0f); + glVertex3f(80.0f, 20.0f, 20.0f); + glVertex3f(80.0f, 40.0f, 20.0f); + glEnd(); + + glColor3f(0.5f, 0.5f, 0.5f); + glBegin(GL_TRIANGLE_FAN); + glVertex3f(20.0f, 20.0f, 20.0f); + for (int i = -20; i < 0; i++){ + float koord_y = sqrt((20 - i) * (20 + i)); + glVertex3f(40.0f + i, koord_y, 20.0f); + } + glEnd(); + + glColor3f(0.5f, 0.5f, 0.5f); + glBegin(GL_TRIANGLE_FAN); + glVertex3f(60.0f, 20.0f, 20.0f); + for (int i = 20; i > 0; i--){ + float koord_y = sqrt((20 - i) * (20 + i)); + glVertex3f(40.0f + i, koord_y, 20.0f); + } + glEnd(); + + // GÓRA + + glColor3f(0.5f, 0.5f, 0.5f); + glBegin(GL_TRIANGLES); + glVertex3f( 0.0f, 40.0f, 0.0f); + glVertex3f( 0.0f, 40.0f, 20.0f); + glVertex3f(80.0f, 40.0f, 20.0f); + glVertex3f(80.0f, 40.0f, 20.0f); + glVertex3f(80.0f, 40.0f, 0.0f); + glVertex3f( 0.0f, 40.0f, 0.0f); + glEnd(); + + // BOKI + + glColor3f(0.5f, 0.5f, 0.5f); + glBegin(GL_TRIANGLES); + glVertex3f( 0.0f, 0.0f, 0.0f); + glVertex3f( 0.0f, 40.0f, 0.0f); + glVertex3f( 0.0f, 0.0f, 20.0f); + glVertex3f( 0.0f, 0.0f, 20.0f); + glVertex3f( 0.0f, 40.0f, 20.0f); + glVertex3f( 0.0f, 40.0f, 0.0f); + + glVertex3f(80.0f, 0.0f, 0.0f); + glVertex3f(80.0f, 40.0f, 0.0f); + glVertex3f(80.0f, 0.0f, 20.0f); + glVertex3f(80.0f, 0.0f, 20.0f); + glVertex3f(80.0f, 40.0f, 20.0f); + glVertex3f(80.0f, 40.0f, 0.0f); + glEnd(); + + // DÓŁ + + glColor3f(0.5f, 0.5f, 0.5f); + glBegin(GL_TRIANGLES); + glVertex3f( 0.0f, 0.0f, 0.0f); + glVertex3f( 0.0f, 0.0f, 20.0f); + glVertex3f(20.0f, 0.0f, 20.0f); + glVertex3f(20.0f, 0.0f, 20.0f); + glVertex3f(20.0f, 0.0f, 0.0f); + glVertex3f( 0.0f, 0.0f, 0.0f); + + glVertex3f(60.0f, 0.0f, 0.0f); + glVertex3f(60.0f, 0.0f, 20.0f); + glVertex3f(80.0f, 0.0f, 20.0f); + glVertex3f(80.0f, 0.0f, 20.0f); + glVertex3f(80.0f, 0.0f, 0.0f); + glVertex3f(60.0f, 0.0f, 0.0f); + glEnd(); + + glColor3f(0.48f, 0.48f, 0.48f); + glBegin(GL_TRIANGLE_STRIP); + glVertex3f(20.0f, 0.0f, 0.0f); + for (int i = -20; i < 0; i++){ + float koord_y = sqrt((20 - i) * (20 + i)); + glVertex3f(40.0f + i, koord_y, 0.0f); + glVertex3f(40.0f + i, koord_y, 20.0f); + } + // lekkie oszustwo, dla lepszego wyglądu + glVertex3f(40.0f + 1.0f, 20.0f, 0.0f); + glVertex3f(40.0f + 1.0f, 20.0f, 20.0f); + glEnd(); + + glColor3f(0.48f, 0.48f, 0.48f); + glBegin(GL_TRIANGLE_STRIP); + glVertex3f(60.0f, 0.0f, 0.0f); + for (int i = 20; i > 0; i--){ + float koord_y = sqrt((20 - i) * (20 + i)); + glVertex3f(40.0f + i, koord_y, 0.0f); + glVertex3f(40.0f + i, koord_y, 20.0f); + } + glEnd(); + } +} + +void cegla(float x, float y, float z){ + + GLfloat sa[3] = { x - 12, y - 3, z - 12}; + GLfloat sb[3] = { x + 12, y - 3, z - 12}; + GLfloat sc[3] = { x + 12, y - 3, z + 12}; + GLfloat sd[3] = { x - 12, y - 3, z + 12}; + GLfloat se[3] = { x - 12, y + 3, z - 12}; + GLfloat sf[3] = { x + 12, y + 3, z - 12}; + GLfloat sg[3] = { x + 12, y + 3, z + 12}; + GLfloat sh[3] = { x - 12, y + 3, z + 12}; + + glColor3f(0.5f, 0.05f, 0.05f); + glBegin(GL_TRIANGLES); + // SCIANY BOCZNE + glVertex3fv(sa); + glVertex3fv(se); + glVertex3fv(sd); + glVertex3fv(sd); + glVertex3fv(sh); + glVertex3fv(se); + + glVertex3fv(sb); + glVertex3fv(sf); + glVertex3fv(sc); + glVertex3fv(sc); + glVertex3fv(sg); + glVertex3fv(sf); + glEnd(); + + // PRZOD, TYL + glColor3f(0.5f, 0.1f, 0.1f); + glBegin(GL_TRIANGLES); + glVertex3fv(sa); + glVertex3fv(se); + glVertex3fv(sb); + glVertex3fv(sb); + glVertex3fv(sf); + glVertex3fv(se); + + glVertex3fv(sd); + glVertex3fv(sh); + glVertex3fv(sc); + glVertex3fv(sc); + glVertex3fv(sg); + glVertex3fv(sh); + glEnd(); + + // GORA, DOL + glColor3f(0.5f, 0.2f, 0.2f); + glBegin(GL_TRIANGLES); + glVertex3fv(se); + glVertex3fv(sh); + glVertex3fv(sg); + glVertex3fv(sg); + glVertex3fv(sf); + glVertex3fv(se); + glEnd(); + + glColor3f(0.5f, 0.03f, 0.03f); + glBegin(GL_TRIANGLES); + glVertex3fv(sa); + glVertex3fv(sd); + glVertex3fv(sc); + glVertex3fv(sc); + glVertex3fv(sb); + glVertex3fv(sa); + glEnd(); + +} + +void mur(int mic, int iwm){ + // mic - minimalna ilość cegieł + // iwm - ilość warstw muru + + for (int i = 0; i <= iwm; i++){ + int cegielWWarstwie = mic + (i + 1) % 2; + float minValue = (cegielWWarstwie - 1) * (-12.5f); + for (int j = 0; j < cegielWWarstwie; j++){ + cegla(minValue + j * (24 + 3), (6 + 3) * i + 3, 0); + } + } +} + +void walec(double r, double h) +{ + double x, y, alpha, PI = 3.14; + glBegin(GL_TRIANGLE_FAN); + glColor3d(0.8, 0.0, 0); + glVertex3d(0, 0, 0); + for (alpha = 0; alpha <= 2 * PI; alpha += PI / 8.0) + { + x = r*sin(alpha); + y = r*cos(alpha); + glVertex3d(x, y, 0); + } + glEnd(); + + glBegin(GL_QUAD_STRIP); + for (alpha = 0.0; alpha <= 2 * PI; alpha += PI / 8.0) + { + x = r*sin(alpha); + y = r* cos(alpha); + glVertex3d(x, y, 0); + glVertex3d(x, y, h); + } + glEnd(); + + glBegin(GL_TRIANGLE_FAN); + glVertex3d(0, 0, h); + for (alpha = 0; alpha >= -2 * PI; alpha -= PI / 8.0) + { + x = r*sin(alpha); + y = r*cos(alpha); + glVertex3d(x, y, h); + } + glEnd(); +} +void ramie(double r1, double r2, double h, double d) +{ + double PI = 3.14, alpha, x, y; + glBegin(GL_TRIANGLE_FAN); + glColor3d(0.8, 0.0, 0); + glVertex3d(0, 0, 0); + for (alpha = PI; alpha <= 2 * PI; alpha += PI / 8.0) + { + x = r1*sin(alpha); + y = r1*cos(alpha); + glVertex3d(x, y, 0); + } + glEnd(); + + glBegin(GL_QUAD_STRIP); + for (alpha = 0; alpha >= -PI; alpha -= PI / 8.0) + { + x = r1*sin(alpha); + y = r1* cos(alpha); + glVertex3d(x, y, h); + glVertex3d(x, y, 0); + } + glEnd(); + + glBegin(GL_TRIANGLE_FAN); + glVertex3d(0, 0, h); + for (alpha = 0; alpha >= -PI; alpha -= PI / 8.0) + { + x = r1*sin(alpha); + y = r1*cos(alpha); + glVertex3d(x, y, h); + } + glEnd(); + + glBegin(GL_TRIANGLE_FAN); + glColor3d(0.8, 0.0, 0); + //glVertex3d(d,r2,0); + //glVertex3d(d, r2, h); + for (alpha = 0; alpha <= PI; alpha += PI / 8.0) + { + x = d + r2 * sin(alpha); + y = d + r2 * cos(alpha); + glVertex3d(x, y, 0); + } + glEnd(); + + glBegin(GL_QUAD_STRIP); + //glVertex3d(d, r2, 0); + for (alpha = 0; alpha <= PI; alpha += PI / 8.0) + { + x = d+ r2*sin(alpha); + y = d +r2* cos(alpha); + glVertex3d(x, y, h); + glVertex3d(x, y, 0); + } + glEnd(); + + glBegin(GL_TRIANGLE_FAN); + //glVertex3d(d, r2, h); + for (alpha = 0; alpha <= PI; alpha += PI / 8.0) + { + x = d +r2*sin(alpha); + y = d +r2*cos(alpha); + glVertex3d(x, y, h); + } + glEnd(); +} + +char zadanie = 0; +char pomoc = 0; + +// Called to draw scene +void RenderScene(void) + { + //float normal[3]; // Storeage for calculated surface normal + + if (!pomoc) { + printf("Grafika Komputerowa\n"); + printf("L01 177188, 2 EF-DI\n\n"); + printf("Nawigacja:\n"); + printf(" q, e - obrot\n"); + printf("<-, -> - obrot\n"); + printf(" ^, v - obrot\n"); + printf(" - zmiana trybu wyswietlania (wypelnienie, siatka)\n"); + printf("r - reset widoku\n"); + printf("1 - szescian\n"); + printf("w - zmiana podpunktu zadania (szescian)\n"); + printf("s - (1.5) zmiana katu obrotu wieczka szescianu\n"); + printf("a - (1.6) zmiana katu otwarcia szescianu\n"); + printf("2 - most\n"); + printf("3 - cegielki\n"); + printf(" z, x - zmiana ilosci cegielek\n"); + printf(" c, v - zmiana ilosci warstw cegielek\n\n"); + + pomoc = 1; + } + + // Clear the window with current clearing color + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + // Save the matrix state and do the rotations + glPushMatrix(); + glRotatef(xRot, 1.0f, 0.0f, 0.0f); + glRotatef(yRot, 0.0f, 1.0f, 0.0f); + glRotatef(zRot, 0.0f, 0.0f, 1.0f); + + ///////////////////////////////////////////////////////////////// + // MIEJSCE NA KOD OPENGL DO TWORZENIA WLASNYCH SCEN: // + ///////////////////////////////////////////////////////////////// + //szescian(); + + //Sposób na odróżnienie "przedniej" i "tylniej" ściany wielokąta: + //glPolygonMode(GL_BACK,GL_LINE); + //walec(40, 40); + //szescian(); + + switch (polygonmode){ + case 0: + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + break; + + case 1: + glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); + break; + + default: + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + } + + switch (zadanie){ + case 1: + szescian(); + break; + + case 2: + most(); + break; + + case 3: + mur(ilosccegiel, iloscwarstw); + break; + + default: + szescian(); + } + + //Uzyskanie siatki: + //glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); + + //Wyrysowanie prostokata: + //glRectd(-10.0,-10.0,20.0,20.0); + + ///////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////// + glPopMatrix(); + glMatrixMode(GL_MODELVIEW); + + // Flush drawing commands + glFlush(); +} + + +// Select the pixel format for a given device context +void SetDCPixelFormat(HDC hDC) + { + int nPixelFormat; + + static PIXELFORMATDESCRIPTOR pfd = { + sizeof(PIXELFORMATDESCRIPTOR), // Size of this structure + 1, // Version of this structure + PFD_DRAW_TO_WINDOW | // Draw to Window (not to bitmap) + PFD_SUPPORT_OPENGL | // Support OpenGL calls in window + PFD_DOUBLEBUFFER, // Double buffered + PFD_TYPE_RGBA, // RGBA Color mode + 24, // Want 24bit color + 0,0,0,0,0,0, // Not used to select mode + 0,0, // Not used to select mode + 0,0,0,0,0, // Not used to select mode + 32, // Size of depth buffer + 0, // Not used to select mode + 0, // Not used to select mode + PFD_MAIN_PLANE, // Draw in main plane + 0, // Not used to select mode + 0,0,0 }; // Not used to select mode + + // Choose a pixel format that best matches that described in pfd + nPixelFormat = ChoosePixelFormat(hDC, &pfd); + + // Set the pixel format for the device context + SetPixelFormat(hDC, nPixelFormat, &pfd); +} + + + +// If necessary, creates a 3-3-2 palette for the device context listed. +HPALETTE GetOpenGLPalette(HDC hDC) + { + HPALETTE hRetPal = NULL; // Handle to palette to be created + PIXELFORMATDESCRIPTOR pfd; // Pixel Format Descriptor + LOGPALETTE *pPal; // Pointer to memory for logical palette + int nPixelFormat; // Pixel format index + int nColors; // Number of entries in palette + int i; // Counting variable + BYTE RedRange,GreenRange,BlueRange; + // Range for each color entry (7,7,and 3) + + + // Get the pixel format index and retrieve the pixel format description + nPixelFormat = GetPixelFormat(hDC); + DescribePixelFormat(hDC, nPixelFormat, sizeof(PIXELFORMATDESCRIPTOR), &pfd); + + // Does this pixel format require a palette? If not, do not create a + // palette and just return NULL + if(!(pfd.dwFlags & PFD_NEED_PALETTE)) + return NULL; + + // Number of entries in palette. 8 bits yeilds 256 entries + nColors = 1 << pfd.cColorBits; + + // Allocate space for a logical palette structure plus all the palette entries + pPal = (LOGPALETTE*)malloc(sizeof(LOGPALETTE) +nColors*sizeof(PALETTEENTRY)); + + // Fill in palette header + pPal->palVersion = 0x300; // Windows 3.0 + pPal->palNumEntries = nColors; // table size + + // Build mask of all 1's. This creates a number represented by having + // the low order x bits set, where x = pfd.cRedBits, pfd.cGreenBits, and + // pfd.cBlueBits. + RedRange = (1 << pfd.cRedBits) -1; + GreenRange = (1 << pfd.cGreenBits) - 1; + BlueRange = (1 << pfd.cBlueBits) -1; + + // Loop through all the palette entries + for(i = 0; i < nColors; i++) + { + // Fill in the 8-bit equivalents for each component + pPal->palPalEntry[i].peRed = (i >> pfd.cRedShift) & RedRange; + pPal->palPalEntry[i].peRed = (unsigned char)( + (double) pPal->palPalEntry[i].peRed * 255.0 / RedRange); + + pPal->palPalEntry[i].peGreen = (i >> pfd.cGreenShift) & GreenRange; + pPal->palPalEntry[i].peGreen = (unsigned char)( + (double)pPal->palPalEntry[i].peGreen * 255.0 / GreenRange); + + pPal->palPalEntry[i].peBlue = (i >> pfd.cBlueShift) & BlueRange; + pPal->palPalEntry[i].peBlue = (unsigned char)( + (double)pPal->palPalEntry[i].peBlue * 255.0 / BlueRange); + + // pPal->palPalEntry[i].peFlags = (unsigned char) NULL; + pPal->palPalEntry[i].peFlags = 0; + } + + + // Create the palette + hRetPal = CreatePalette(pPal); + + // Go ahead and select and realize the palette for this device context + SelectPalette(hDC,hRetPal,FALSE); + RealizePalette(hDC); + + // Free the memory used for the logical palette structure + free(pPal); + + // Return the handle to the new palette + return hRetPal; +} + + +// Entry point of all Windows programs +int APIENTRY WinMain( HINSTANCE hInst, + HINSTANCE hPrevInstance, + LPSTR lpCmdLine, + int nCmdShow) + { + MSG msg; // Windows message structure + WNDCLASS wc; // Windows class structure + HWND hWnd; // Storeage for window handle + + hInstance = hInst; + + // Register Window style + wc.style = CS_HREDRAW | CS_VREDRAW; + wc.lpfnWndProc = (WNDPROC) WndProc; + wc.cbClsExtra = 0; + wc.cbWndExtra = 0; + wc.hInstance = hInstance; + wc.hIcon = NULL; + wc.hCursor = LoadCursor(NULL, IDC_ARROW); + + // No need for background brush for OpenGL window + wc.hbrBackground = NULL; + + wc.lpszMenuName = MAKEINTRESOURCE(IDR_MENU); + wc.lpszClassName = lpszAppName; + + // Register the window class + if(RegisterClass(&wc) == 0) + return FALSE; + + + // Create the main application window + hWnd = CreateWindow( + lpszAppName, + lpszAppName, + + // OpenGL requires WS_CLIPCHILDREN and WS_CLIPSIBLINGS + WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, + + // Window position and size + 50, 50, + 400, 400, + NULL, + NULL, + hInstance, + NULL); + + // If window was not created, quit + if(hWnd == NULL) + return FALSE; + + + // Display the window + ShowWindow(hWnd,SW_SHOW); + UpdateWindow(hWnd); + + // Process application messages until the application closes + while( GetMessage(&msg, NULL, 0, 0)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + + return msg.wParam; +} + + +// Window procedure, handles all messages for this program +LRESULT CALLBACK WndProc( HWND hWnd, + UINT message, + WPARAM wParam, + LPARAM lParam) + { + static HGLRC hRC; // Permenant Rendering context + static HDC hDC; // Private GDI Device context + + switch (message) + { + // Window creation, setup for OpenGL + case WM_CREATE: + // Store the device context + hDC = GetDC(hWnd); + + // Select the pixel format + SetDCPixelFormat(hDC); + + // Create palette if needed + hPalette = GetOpenGLPalette(hDC); + + // Create the rendering context and make it current + hRC = wglCreateContext(hDC); + wglMakeCurrent(hDC, hRC); + SetupRC(); + glGenTextures(2, &texture[0]); // tworzy obiekt tekstury + + // ładuje pierwszy obraz tekstury: + bitmapData = LoadBitmapFile("Bitmapy\\checker.bmp", &bitmapInfoHeader); + + glBindTexture(GL_TEXTURE_2D, texture[0]); // aktywuje obiekt tekstury + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP ); + + // tworzy obraz tekstury + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, bitmapInfoHeader.biWidth, + bitmapInfoHeader.biHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, bitmapData); + + if(bitmapData) + free(bitmapData); + + // ładuje drugi obraz tekstury: + bitmapData = LoadBitmapFile("Bitmapy\\crate.bmp", &bitmapInfoHeader); + glBindTexture(GL_TEXTURE_2D, texture[1]); // aktywuje obiekt tekstury + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP ); + + // tworzy obraz tekstury + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, bitmapInfoHeader.biWidth, + bitmapInfoHeader.biHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, bitmapData); + + if(bitmapData) + free(bitmapData); + + // ustalenie sposobu mieszania tekstury z tłem + glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,GL_MODULATE); + break; + + // Window is being destroyed, cleanup + case WM_DESTROY: + // Deselect the current rendering context and delete it + wglMakeCurrent(hDC,NULL); + wglDeleteContext(hRC); + + // Delete the palette if it was created + if(hPalette != NULL) + DeleteObject(hPalette); + + // Tell the application to terminate after the window + // is gone. + PostQuitMessage(0); + break; + + // Window is resized. + case WM_SIZE: + // Call our function which modifies the clipping + // volume and viewport + ChangeSize(LOWORD(lParam), HIWORD(lParam)); + break; + + + // The painting function. This message sent by Windows + // whenever the screen needs updating. + case WM_PAINT: + { + // Call OpenGL drawing code + RenderScene(); + + SwapBuffers(hDC); + + // Validate the newly painted client area + ValidateRect(hWnd,NULL); + } + break; + + // Windows is telling the application that it may modify + // the system palette. This message in essance asks the + // application for a new palette. + case WM_QUERYNEWPALETTE: + // If the palette was created. + if(hPalette) + { + int nRet; + + // Selects the palette into the current device context + SelectPalette(hDC, hPalette, FALSE); + + // Map entries from the currently selected palette to + // the system palette. The return value is the number + // of palette entries modified. + nRet = RealizePalette(hDC); + + // Repaint, forces remap of palette in current window + InvalidateRect(hWnd,NULL,FALSE); + + return nRet; + } + break; + + + // This window may set the palette, even though it is not the + // currently active window. + case WM_PALETTECHANGED: + // Don't do anything if the palette does not exist, or if + // this is the window that changed the palette. + if((hPalette != NULL) && ((HWND)wParam != hWnd)) + { + // Select the palette into the device context + SelectPalette(hDC,hPalette,FALSE); + + // Map entries to system palette + RealizePalette(hDC); + + // Remap the current colors to the newly realized palette + UpdateColors(hDC); + return 0; + } + break; + + // Key press, check for arrow keys to do cube rotation. + case WM_KEYDOWN: + { + switch (wParam){ + case VK_UP: + xRot -= 5.0f; + break; + + case VK_DOWN: + xRot += 5.0f; + break; + + case VK_LEFT: + yRot -= 5.0f; + break; + + case VK_RIGHT: + yRot += 5.0f; + break; + + case 'Q': + zRot += 5.0f; + break; + + case 'E': + zRot -= 5.0f; + break; + + case 'A': + variableIndex++; + variableIndex %= sizeof(variableDegrees) / sizeof(variableDegrees[0]); + break; + + case 'S': + variable2++; + variable2 %= 360; + break; + + case 'W': + variable3++; + variable3 %= 7; + break; + + case 'Z': + iloscwarstw--; + break; + + case 'X': + iloscwarstw++; + break; + + case 'C': + ilosccegiel--; + break; + + case 'V': + ilosccegiel++; + break; + + case 'R': + xRot = 0; + yRot = 0; + zRot = 0; + variableIndex = 0; + variable2 = 45; + variable3 = 0; + iloscwarstw = 5; + ilosccegiel = 3; + break; + + case 49: // 1 na klawiaturze + zadanie = 1; + break; + + case 50: // 2 na klawiaturze + zadanie = 2; + break; + + case 51: // 3 na klawiaturze + zadanie = 3; + break; + + case 32: + polygonmode = !polygonmode; + break; + + default: + printf("debug: nacisnieto nierozpoznany klawisz: %d\n", wParam); + + } + + xRot = (const int)xRot % 360; + yRot = (const int)yRot % 360; + zRot = (const int)zRot % 360; + + InvalidateRect(hWnd,NULL,FALSE); + } + break; + + // A menu command + case WM_COMMAND: + { + switch(LOWORD(wParam)) + { + // Exit the program + case ID_FILE_EXIT: + DestroyWindow(hWnd); + break; + + // Display the about box + case ID_HELP_ABOUT: + DialogBox (hInstance, + MAKEINTRESOURCE(IDD_DIALOG_ABOUT), + hWnd, + AboutDlgProc); + break; + } + } + break; + + + default: // Passes it on if unproccessed + return (DefWindowProc(hWnd, message, wParam, lParam)); + + } + + return (0L); +} + + + + +// Dialog procedure. +BOOL APIENTRY AboutDlgProc (HWND hDlg, UINT message, UINT wParam, LONG lParam) + { + + switch (message) + { + // Initialize the dialog box + case WM_INITDIALOG: + { + int i; + GLenum glError; + + // glGetString demo + SetDlgItemText(hDlg,IDC_OPENGL_VENDOR,glGetString(GL_VENDOR)); + SetDlgItemText(hDlg,IDC_OPENGL_RENDERER,glGetString(GL_RENDERER)); + SetDlgItemText(hDlg,IDC_OPENGL_VERSION,glGetString(GL_VERSION)); + SetDlgItemText(hDlg,IDC_OPENGL_EXTENSIONS,glGetString(GL_EXTENSIONS)); + + // gluGetString demo + SetDlgItemText(hDlg,IDC_GLU_VERSION,gluGetString(GLU_VERSION)); + SetDlgItemText(hDlg,IDC_GLU_EXTENSIONS,gluGetString(GLU_EXTENSIONS)); + + + // Display any recent error messages + i = 0; + do { + glError = glGetError(); + SetDlgItemText(hDlg,IDC_ERROR1+i,gluErrorString(glError)); + i++; + } + while(i < 6 && glError != GL_NO_ERROR); + + + return (TRUE); + } + break; + + // Process command messages + case WM_COMMAND: + { + // Validate and Make the changes + if(LOWORD(wParam) == IDOK) + EndDialog(hDlg,TRUE); + } + break; + + // Closed from sysbox + case WM_CLOSE: + EndDialog(hDlg,TRUE); + break; + } + + return FALSE; +} \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..bfa77c9 --- /dev/null +++ b/Makefile @@ -0,0 +1,14 @@ +CC = "C:\\msys64\\mingw64\\bin\\g++.exe" +CFLAGS = -I. +DEPS = -lopengl32 -lglu32 -lgdi32 -l:glew32.lib +LINK = -L. -DGLEW_STATIC +OUTPUT = output.exe + +default: + $(CC) -g *.cpp $(CFLAGS) $(DEPS) $(LINK) -static -static-libgcc -fno-keep-inline-dllexport -o $(OUTPUT) + +run: default + $(OUTPUT) + +clean: + rm $(OUTPUT) \ No newline at end of file diff --git a/README.md b/README.md index 93c00e9..3029f9b 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,3 @@ # grafikaKBT +Uruchamianie: `make run` diff --git a/RESOURCE.APS b/RESOURCE.APS new file mode 100644 index 0000000..0fcb536 Binary files /dev/null and b/RESOURCE.APS differ diff --git a/RESOURCE.H b/RESOURCE.H new file mode 100644 index 0000000..5382921 --- /dev/null +++ b/RESOURCE.H @@ -0,0 +1,35 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Developer Studio generated include file. +// Used by resource.rc +// +#define IDR_MENU 101 +#define IDD_DIALOG_ABOUT 102 +#define IDR_TOOLBAR1 104 +#define IDC_OPENGL_VENDOR 1000 +#define IDC_OPENGL_RENDERER 1001 +#define IDC_OPENGL_VERSION 1002 +#define IDC_OPENGL_EXTENSIONS 1003 +#define IDC_GLU_VERSION 1005 +#define IDC_GLU_EXTENSIONS 1006 +#define IDC_ERROR1 1007 +#define IDC_ERROR2 1008 +#define IDC_ERROR3 1009 +#define IDC_ERROR4 1010 +#define IDC_ERROR5 1011 +#define IDC_ERROR6 1012 +#define ID_FILE_EXIT 40001 +#define ID_HELP_ABOUT 40002 +#define ID_BUTTON40003 40003 +#define ID_LIGHTING_SUNLIGHT 40004 +#define ID_LIGHTING_AMBIENTLIGHT 40005 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 106 +#define _APS_NEXT_COMMAND_VALUE 40006 +#define _APS_NEXT_CONTROL_VALUE 1013 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/cube.obj b/cube.obj new file mode 100644 index 0000000..d51668e --- /dev/null +++ b/cube.obj @@ -0,0 +1,44 @@ +# Blender 4.2.1 LTS +# www.blender.org +o Cube +v 1.000000 1.000000 -1.000000 +v 1.000000 -1.000000 -1.000000 +v 1.000000 1.000000 1.000000 +v 1.000000 -1.000000 1.000000 +v -1.000000 1.000000 -1.000000 +v -1.000000 -1.000000 -1.000000 +v -1.000000 1.000000 1.000000 +v -1.000000 -1.000000 1.000000 +vn -0.0000 1.0000 -0.0000 +vn -0.0000 -0.0000 1.0000 +vn -1.0000 -0.0000 -0.0000 +vn -0.0000 -1.0000 -0.0000 +vn 1.0000 -0.0000 -0.0000 +vn -0.0000 -0.0000 -1.0000 +vt 0.875000 0.500000 +vt 0.625000 0.750000 +vt 0.625000 0.500000 +vt 0.375000 1.000000 +vt 0.375000 0.750000 +vt 0.625000 0.000000 +vt 0.375000 0.250000 +vt 0.375000 0.000000 +vt 0.375000 0.500000 +vt 0.125000 0.750000 +vt 0.125000 0.500000 +vt 0.625000 0.250000 +vt 0.875000 0.750000 +vt 0.625000 1.000000 +s 0 +f 5/1/1 3/2/1 1/3/1 +f 3/2/2 8/4/2 4/5/2 +f 7/6/3 6/7/3 8/8/3 +f 2/9/4 8/10/4 6/11/4 +f 1/3/5 4/5/5 2/9/5 +f 5/12/6 2/9/6 6/7/6 +f 5/1/1 7/13/1 3/2/1 +f 3/2/2 7/14/2 8/4/2 +f 7/6/3 5/12/3 6/7/3 +f 2/9/4 4/5/4 8/10/4 +f 1/3/5 3/2/5 4/5/5 +f 5/12/6 1/3/6 2/9/6 diff --git a/loadOBJ.cpp b/loadOBJ.cpp new file mode 100644 index 0000000..f4225c2 --- /dev/null +++ b/loadOBJ.cpp @@ -0,0 +1,93 @@ +#include "loadOBJ.h" +#include +//#include +#include +//#include +//#include +//#include +//#include + +// using namespace glm; + +bool loadOBJ(const char* path, std::vector & out_vertices, std::vector & out_uvs, std::vector & out_normals){ + + std::vector vertexIndices, uvIndices, normalIndices; + std::vector temp_vertices; + std::vector temp_uvs; + std::vector temp_normals; + + printf("Ladowanie pliku %s...\n", path); + + FILE* file = fopen(path, "r"); + if (file == NULL) { + printf("Impossible to open the file!\n"); + return false; + } + + while (1) { + + char lineHeader[128]; + // read the first word of the line + int res = fscanf(file, "%s", lineHeader); + if (res == EOF) break; // EOF = End Of File. Quit the loop. + + // else: parse lineHeader + if (strcmp(lineHeader, "v") == 0) { + + glm::vec3 vertex; + fscanf(file, "%f %f %f\n", &vertex.x, &vertex.y, &vertex.z); + temp_vertices.push_back(vertex); + + } else if (strcmp(lineHeader, "vt") == 0) { + + glm::vec2 uv; + fscanf(file, "%f %f\n", &uv.x, &uv.y); + temp_uvs.push_back(uv); + + } else if (strcmp(lineHeader, "vn") == 0) { + + glm::vec3 normal; + fscanf(file, "%f %f %f\n", &normal.x, &normal.y, &normal.z); + temp_normals.push_back(normal); + + } else if (strcmp(lineHeader, "f") == 0) { + + std::string vertex1, vertex2, vertex3; + unsigned int vertexIndex[3], uvIndex[3], normalIndex[3]; + int matches = fscanf(file, "%d/%d/%d %d/%d/%d %d/%d/%d\n", &vertexIndex[0], &uvIndex[0], &normalIndex[0], &vertexIndex[1], &uvIndex[1], &normalIndex[1], &vertexIndex[2], &uvIndex[2], &normalIndex[2]); + + if (matches != 9){ + printf("File can't be read by our simple parser : ( Try exporting with other options\n"); + return false; + } + + vertexIndices.push_back(vertexIndex[0]); + vertexIndices.push_back(vertexIndex[1]); + vertexIndices.push_back(vertexIndex[2]); + uvIndices .push_back(uvIndex[0]); + uvIndices .push_back(uvIndex[1]); + uvIndices .push_back(uvIndex[2]); + normalIndices.push_back(normalIndex[0]); + normalIndices.push_back(normalIndex[1]); + normalIndices.push_back(normalIndex[2]); + } + + // For each vertex of each triangle + for (unsigned int i = 0; i < vertexIndices.size(); i++) { + unsigned int vertexIndex = vertexIndices[i]; + unsigned int uvIndex = uvIndices[i]; + unsigned int normalIndex = normalIndices[i]; + + glm::vec3 vertex1 = temp_vertices[vertexIndex - 1]; + glm::vec2 vertex2 = temp_uvs[uvIndex - 1]; + glm::vec3 vertex3 = temp_normals[normalIndex - 1]; + + out_vertices .push_back(vertex1); + out_uvs .push_back(vertex2); + out_normals .push_back(vertex3); + } + + } + + return 0; +} \ No newline at end of file diff --git a/loadOBJ.h b/loadOBJ.h new file mode 100644 index 0000000..51ee50a --- /dev/null +++ b/loadOBJ.h @@ -0,0 +1,15 @@ +#pragma once +//#include +#include +//#include +//#include +//#include +//#include +#include + +bool loadOBJ( + const char* path, + std::vector & out_vertices, + std::vector & out_uvs, + std::vector & out_normals +); \ No newline at end of file diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..f092814 --- /dev/null +++ b/main.cpp @@ -0,0 +1,799 @@ +#define _CRT_SECURE_NO_WARNINGS +#ifdef _MSC_VER // Check if MS Visual C compiler +# pragma comment(lib, "opengl32.lib") // Compiler-specific directive to avoid manually configuration +# pragma comment(lib, "glu32.lib") // Link libraries +#endif +#ifdef _MSC_VER +# ifndef _MBCS +# define _MBCS +# endif +# ifdef _UNICODE +# undef _UNICODE +# endif +# ifdef UNICODE +# undef UNICODE +# endif +#endif +// #define glewExperimental +// #define glewInit +// #define glewGenBuffers +// #define glewBindBuffer +// #define glewBufferData +// #define GLEW_STATIC +#include // Window defines +#include +//#include +#include // OpenGL +#include // GLU library +#include // Define for sqrt +#include +#include +#include "RESOURCE.H" // About box resource identifiers. +#include "szescian.h" +#include "loadOBJ.h" +#include +#include +#include + +using namespace glm; + +#define glRGB(x, y, z) glColor3ub((GLubyte)x, (GLubyte)y, (GLubyte)z) +#define BITMAP_ID 0x4D42 // identyfikator formatu BMP +#define GL_PI 3.1415 + +//using namespace std; + +HPALETTE hPalette = NULL; + +// Application name and instance storeage +static LPCTSTR lpszAppName = "GL Template"; +static HINSTANCE hInstance; + +// Rotation amounts +static GLfloat xRot = 0.0f; +static GLfloat yRot = 0.0f; +static GLfloat zRot = 0.0f; + + +static GLsizei lastHeight; +static GLsizei lastWidth; + +// Opis tekstury +BITMAPINFOHEADER bitmapInfoHeader; // nagłówek obrazu +unsigned char* bitmapData; // dane tekstury +unsigned int texture[2]; // obiekt tekstury + +LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); + +BOOL APIENTRY AboutDlgProc(HWND hDlg, UINT message, UINT wParam, LONG lParam); + +void SetDCPixelFormat(HDC hDC); + +int polygonmode = 0; +char loadCount = 0; + +// Change viewing volume and viewport. Called when window is resized +void ChangeSize(GLsizei w, GLsizei h) { + GLfloat nRange = 100.0f; + GLfloat fAspect; + // Prevent a divide by zero + if (h == 0) h = 1; + + lastWidth = w; + lastHeight = h; + + fAspect = (GLfloat)w / (GLfloat)h; + // Set Viewport to window dimensions + glViewport(0, 0, w, h); + + // Reset coordinate system + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + + // Establish clipping volume (left, right, bottom, top, near, far) + if (w <= h) glOrtho(-nRange, nRange, -nRange * h / w, nRange * h / w, -nRange, nRange); + else glOrtho(-nRange * w / h, nRange * w / h, -nRange, nRange, -nRange, nRange); + + // Establish perspective: + /* + gluPerspective(60.0f, fAspect, 1.0, 400); + */ + + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); +} + +void SetupRC() { + // Light values and coordinates + //GLfloat ambientLight[] = { 0.3f, 0.3f, 0.3f, 1.0f }; + //GLfloat diffuseLight[] = { 0.7f, 0.7f, 0.7f, 1.0f }; + //GLfloat specular[] = { 1.0f, 1.0f, 1.0f, 1.0f }; + //GLfloat lightPos[] = { 0.0f, 150.0f, 150.0f, 1.0f }; + //GLfloat specref[] = { 1.0f, 1.0f, 1.0f, 1.0f }; + + + glEnable(GL_DEPTH_TEST); // Hidden surface removal + glFrontFace(GL_CCW); // Counter clock-wise polygons face out + //glEnable(GL_CULL_FACE); // Do not calculate inside of jet + + // Enable lighting + //glEnable(GL_LIGHTING); + + // Setup and enable light 0 + //glLightfv(GL_LIGHT0, GL_AMBIENT, ambientLight); + //glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuseLight); + //glLightfv(GL_LIGHT0, GL_SPECULAR, specular); + //glLightfv(GL_LIGHT0, GL_POSITION, lightPos); + //glEnable(GL_LIGHT0); + + // Enable color tracking + //glEnable(GL_COLOR_MATERIAL); + + // Set Material properties to follow glColor values + //glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE); + + // All materials hereafter have full specular reflectivity + // with a high shine + //glMaterialfv(GL_FRONT, GL_SPECULAR, specref); + //glMateriali(GL_FRONT, GL_SHININESS, 128); + + + // White background + glClearColor(1.0f, 1.0f, 1.0f, 1.0f); + // Black brush + glColor3f(0.0, 0.0, 0.0); +} + +// LoadBitmapFile +// opis: ładuje mapę bitową z pliku i zwraca jej adres. +// Wypełnia strukturę nagłówka. +// Nie obsługuje map 8-bitowych. +unsigned char* LoadBitmapFile(char* filename, BITMAPINFOHEADER* bitmapInfoHeader) { + FILE* filePtr; // wskaźnik pozycji pliku + BITMAPFILEHEADER bitmapFileHeader; // nagłówek pliku + unsigned char* bitmapImage; // dane obrazu + int imageIdx = 0; // licznik pikseli + unsigned char tempRGB; // zmienna zamiany składowych + + // otwiera plik w trybie "read binary" + filePtr = fopen(filename, "rb"); + if (filePtr == NULL) + return NULL; + + // wczytuje nagłówek pliku + fread(&bitmapFileHeader, sizeof(BITMAPFILEHEADER), 1, filePtr); + + // sprawdza, czy jest to plik formatu BMP + if (bitmapFileHeader.bfType != BITMAP_ID) + { + fclose(filePtr); + return NULL; + } + + // wczytuje nagłówek obrazu + fread(bitmapInfoHeader, sizeof(BITMAPINFOHEADER), 1, filePtr); + + // ustawia wskaźnik pozycji pliku na początku danych obrazu + fseek(filePtr, bitmapFileHeader.bfOffBits, SEEK_SET); + + // przydziela pamięć buforowi obrazu + bitmapImage = (unsigned char*)malloc(bitmapInfoHeader->biSizeImage); + + // sprawdza, czy udało się przydzielić pamięć + if (!bitmapImage) { + free(bitmapImage); + fclose(filePtr); + return NULL; + } + + // wczytuje dane obrazu + fread(bitmapImage, 1, bitmapInfoHeader->biSizeImage, filePtr); + + // sprawdza, czy dane zostały wczytane + if (bitmapImage == NULL) { + fclose(filePtr); + return NULL; + } + + // zamienia miejscami składowe R i B + for (imageIdx = 0; imageIdx < bitmapInfoHeader->biSizeImage; imageIdx += 3) { + tempRGB = bitmapImage[imageIdx]; + bitmapImage[imageIdx] = bitmapImage[imageIdx + 2]; + bitmapImage[imageIdx + 2] = tempRGB; + } + + // zamyka plik i zwraca wskaźnik bufora zawierającego wczytany obraz + fclose(filePtr); + return bitmapImage; +} + +void SetDCPixelFormat(HDC hDC) { + int nPixelFormat; + + static PIXELFORMATDESCRIPTOR pfd = { + sizeof(PIXELFORMATDESCRIPTOR), // Size of this structure + 1, // Version of this structure + PFD_DRAW_TO_WINDOW | // Draw to Window (not to bitmap) + PFD_SUPPORT_OPENGL | // Support OpenGL calls in window + PFD_DOUBLEBUFFER, // Double buffered + PFD_TYPE_RGBA, // RGBA Color mode + 24, // Want 24bit color + 0,0,0,0,0,0, // Not used to select mode + 0,0, // Not used to select mode + 0,0,0,0,0, // Not used to select mode + 32, // Size of depth buffer + 0, // Not used to select mode + 0, // Not used to select mode + PFD_MAIN_PLANE, // Draw in main plane + 0, // Not used to select mode + 0,0,0 }; // Not used to select mode + + // Choose a pixel format that best matches that described in pfd + nPixelFormat = ChoosePixelFormat(hDC, &pfd); + + // Set the pixel format for the device context + SetPixelFormat(hDC, nPixelFormat, &pfd); +} + +std::vector vertices; +std::vector uvs; +std::vector normals; // Won't be used at the moment. +GLuint vertexbuffer; +GLuint uvbuffer; + +void RenderScene(void) { + if (loadCount == 0){ + // załaduj model + + // if(!glfwInit()) { + // fprintf(stderr, "Failed to initialize GLFW\n"); + // getchar(); + // return; + // } + + // Initialize GLEW + glewExperimental = true; // Needed for core profile + if (glewInit() != GLEW_OK) { + fprintf(stderr, "Failed to initialize GLEW\n"); + getchar(); + // glfwTerminate(); + return; + } + + /* */ + // Read our .obj file + + bool res = loadOBJ("suzanne.obj", vertices, uvs, normals); + /* */ + + glGenBuffers(1, &vertexbuffer); + glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer); + glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(glm::vec3), &vertices[0], GL_STATIC_DRAW); + + glGenBuffers(1, &uvbuffer); + glBindBuffer(GL_ARRAY_BUFFER, uvbuffer); + glBufferData(GL_ARRAY_BUFFER, uvs.size() * sizeof(glm::vec2), &uvs[0], GL_STATIC_DRAW); + + loadCount++; + + //glClearColor(0.0f, 0.0f, 0.4f, 0.0f); + + + } + + //float normal[3]; // Storage for calculated surface normal + + // Clear the window with current clearing color + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + // Save the matrix state and do the rotations + glPushMatrix(); + glRotatef(xRot, 1.0f, 0.0f, 0.0f); + glRotatef(yRot, 0.0f, 1.0f, 0.0f); + glRotatef(zRot, 0.0f, 0.0f, 1.0f); + + // gluLookAt( + // 0, 0, 0, // the position of your camera, in world space + // 0, 0, 0, // where you want to look at, in world space + // 0, 1, 0 // probably glm::vec3(0,1,0), but (0,-1,0) would make you looking upside-down, which can be great too + // ); + + ///////////////////////////////////////////////////////////////// + // MIEJSCE NA KOD OPENGL DO TWORZENIA WLASNYCH SCEN: // + ///////////////////////////////////////////////////////////////// + //szescian(); + + //Sposób na odróżnienie "przedniej" i "tylniej" ściany wielokąta: + //glPolygonMode(GL_BACK,GL_LINE); + //walec(40, 40); + //szescian(); + + switch (polygonmode) { + case 0: + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + break; + + case 1: + glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); + break; + + default: + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + } + + { + // Clear the screen + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + // Use our shader + //glUseProgram(programID); + + // Bind our texture in Texture Unit 0 + //glActiveTexture(GL_TEXTURE0); + //glBindTexture(GL_TEXTURE_2D, Texture); + // Set our "myTextureSampler" sampler to use Texture Unit 0 + //glUniform1i(TextureID, 0); + + // 1rst attribute buffer : vertices + glEnableVertexAttribArray(0); + glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer); + glVertexAttribPointer( + 0, // attribute + 3, // size + GL_FLOAT, // type + GL_FALSE, // normalized? + 0, // stride + (void*)0 // array buffer offset + ); + + // 2nd attribute buffer : UVs + glEnableVertexAttribArray(1); + glBindBuffer(GL_ARRAY_BUFFER, uvbuffer); + glVertexAttribPointer( + 1, // attribute + 2, // size + GL_FLOAT, // type + GL_FALSE, // normalized? + 0, // stride + (void*)0 // array buffer offset + ); + + // Draw the triangle ! + glDrawArrays(GL_TRIANGLES, 0, vertices.size() ); + + glDisableVertexAttribArray(0); + glDisableVertexAttribArray(1); + + // Swap buffers + //glfwSwapBuffers(window); + //glfwPollEvents(); + } + + + /* + szescian nowy; + nowy.create(0, 0, 0, 10); + nowy.create(-10, 20, 0, 10); + nowy.create(25, 10, 0, 10); + */ + + glDrawArrays(GL_TRIANGLES, 0, vertices.size()); + + /* + szescian nowy2; + nowy2.create(0, 10, 0, 10); + szescian nowy3; + nowy3.create(0, 20, -10, 10); + */ + + //Uzyskanie siatki: + //glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); + + //Wyrysowanie prostokata: + //glRectd(-10.0,-10.0,20.0,20.0); + + ///////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////// + glPopMatrix(); + glMatrixMode(GL_MODELVIEW); + + // Flush drawing commands + glFlush(); +} + +// If necessary, creates a 3-3-2 palette for the device context listed. +HPALETTE GetOpenGLPalette(HDC hDC) { + HPALETTE hRetPal = NULL; // Handle to palette to be created + PIXELFORMATDESCRIPTOR pfd; // Pixel Format Descriptor + LOGPALETTE* pPal; // Pointer to memory for logical palette + int nPixelFormat; // Pixel format index + int nColors; // Number of entries in palette + int i; // Counting variable + BYTE RedRange, GreenRange, BlueRange; + // Range for each color entry (7,7,and 3) + + + // Get the pixel format index and retrieve the pixel format description + nPixelFormat = GetPixelFormat(hDC); + DescribePixelFormat(hDC, nPixelFormat, sizeof(PIXELFORMATDESCRIPTOR), &pfd); + + // Does this pixel format require a palette? If not, do not create a + // palette and just return NULL + if (!(pfd.dwFlags & PFD_NEED_PALETTE)) return NULL; + + // Number of entries in palette. 8 bits yeilds 256 entries + nColors = 1 << pfd.cColorBits; + + // Allocate space for a logical palette structure plus all the palette entries + pPal = (LOGPALETTE*)malloc(sizeof(LOGPALETTE) + nColors * sizeof(PALETTEENTRY)); + + // Fill in palette header + pPal->palVersion = 0x300; // Windows 3.0 + pPal->palNumEntries = nColors; // table size + + // Build mask of all 1's. This creates a number represented by having + // the low order x bits set, where x = pfd.cRedBits, pfd.cGreenBits, and + // pfd.cBlueBits. + RedRange = (1 << pfd.cRedBits) - 1; + GreenRange = (1 << pfd.cGreenBits) - 1; + BlueRange = (1 << pfd.cBlueBits) - 1; + + // Loop through all the palette entries + for (i = 0; i < nColors; i++) { + + // Fill in the 8-bit equivalents for each component + pPal->palPalEntry[i].peRed = (i >> pfd.cRedShift) & RedRange; + pPal->palPalEntry[i].peRed = (unsigned char)( + (double)pPal->palPalEntry[i].peRed * 255.0 / RedRange); + + pPal->palPalEntry[i].peGreen = (i >> pfd.cGreenShift) & GreenRange; + pPal->palPalEntry[i].peGreen = (unsigned char)( + (double)pPal->palPalEntry[i].peGreen * 255.0 / GreenRange); + + pPal->palPalEntry[i].peBlue = (i >> pfd.cBlueShift) & BlueRange; + pPal->palPalEntry[i].peBlue = (unsigned char)( + (double)pPal->palPalEntry[i].peBlue * 255.0 / BlueRange); + + // pPal->palPalEntry[i].peFlags = (unsigned char) NULL; + pPal->palPalEntry[i].peFlags = 0; + } + + + // Create the palette + hRetPal = CreatePalette(pPal); + + // Go ahead and select and realize the palette for this device context + SelectPalette(hDC, hRetPal, FALSE); + RealizePalette(hDC); + + // Free the memory used for the logical palette structure + free(pPal); + + // Return the handle to the new palette + return hRetPal; +} + +int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { + + MSG msg; // Windows message structure + WNDCLASS wc; // Windows class structure + HWND hWnd; // Storeage for window handle + + hInstance = hInst; + + // Register Window style + wc.style = CS_HREDRAW | CS_VREDRAW; + wc.lpfnWndProc = (WNDPROC)WndProc; + wc.cbClsExtra = 0; + wc.cbWndExtra = 0; + wc.hInstance = hInstance; + wc.hIcon = NULL; + wc.hCursor = LoadCursor(NULL, IDC_ARROW); + + // No need for background brush for OpenGL window + wc.hbrBackground = NULL; + + wc.lpszMenuName = MAKEINTRESOURCE(IDR_MENU); + wc.lpszClassName = lpszAppName; + + // Register the window class + if (RegisterClass(&wc) == 0) return FALSE; + + + // Create the main application window + hWnd = CreateWindow( + lpszAppName, + lpszAppName, + + // OpenGL requires WS_CLIPCHILDREN and WS_CLIPSIBLINGS + WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, + + // Window position and size + 50, 50, + 400, 400, + NULL, + NULL, + hInstance, + NULL); + + // If window was not created, quit + if (hWnd == NULL) return FALSE; + + + // Display the window + ShowWindow(hWnd, SW_SHOW); + UpdateWindow(hWnd); + + // Process application messages until the application closes + while (GetMessage(&msg, NULL, 0, 0)) { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + + return msg.wParam; +} + + +// Window procedure, handles all messages for this program +LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { + static HGLRC hRC; // Permenant Rendering context + static HDC hDC; // Private GDI Device context + + switch (message) { + // Window creation, setup for OpenGL + case WM_CREATE: + // Store the device context + hDC = GetDC(hWnd); + + // Select the pixel format + SetDCPixelFormat(hDC); + + // Create palette if needed + hPalette = GetOpenGLPalette(hDC); + + // Create the rendering context and make it current + hRC = wglCreateContext(hDC); + wglMakeCurrent(hDC, hRC); + SetupRC(); + glGenTextures(2, &texture[0]); // tworzy obiekt tekstury + + // ładuje pierwszy obraz tekstury: + bitmapData = LoadBitmapFile((char*)"Bitmapy\\checker.bmp", &bitmapInfoHeader); + + glBindTexture(GL_TEXTURE_2D, texture[0]); // aktywuje obiekt tekstury + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); + + // tworzy obraz tekstury + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, bitmapInfoHeader.biWidth, + bitmapInfoHeader.biHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, bitmapData); + + if (bitmapData) free(bitmapData); + + // ładuje drugi obraz tekstury: + bitmapData = LoadBitmapFile((char*)"Bitmapy\\crate.bmp", &bitmapInfoHeader); + glBindTexture(GL_TEXTURE_2D, texture[1]); // aktywuje obiekt tekstury + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); + + // tworzy obraz tekstury + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, bitmapInfoHeader.biWidth, + bitmapInfoHeader.biHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, bitmapData); + + if (bitmapData) free(bitmapData); + + // ustalenie sposobu mieszania tekstury z tłem + glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + break; + + // Window is being destroyed, cleanup + case WM_DESTROY: + // Deselect the current rendering context and delete it + wglMakeCurrent(hDC, NULL); + wglDeleteContext(hRC); + + // Delete the palette if it was created + if (hPalette != NULL) DeleteObject(hPalette); + + // Tell the application to terminate after the window + // is gone. + PostQuitMessage(0); + break; + + // Window is resized. + case WM_SIZE: + // Call our function which modifies the clipping + // volume and viewport + ChangeSize(LOWORD(lParam), HIWORD(lParam)); + break; + + + // The painting function. This message sent by Windows + // whenever the screen needs updating. + case WM_PAINT: + // Call OpenGL drawing code + RenderScene(); + + SwapBuffers(hDC); + + // Validate the newly painted client area + ValidateRect(hWnd, NULL); + break; + + // Windows is telling the application that it may modify + // the system palette. This message in essance asks the + // application for a new palette. + case WM_QUERYNEWPALETTE: + // If the palette was created. + if (hPalette) { + int nRet; + + // Selects the palette into the current device context + SelectPalette(hDC, hPalette, FALSE); + + // Map entries from the currently selected palette to + // the system palette. The return value is the number + // of palette entries modified. + nRet = RealizePalette(hDC); + + // Repaint, forces remap of palette in current window + InvalidateRect(hWnd, NULL, FALSE); + + return nRet; + } + break; + + // This window may set the palette, even though it is not the + // currently active window. + case WM_PALETTECHANGED: + // Don't do anything if the palette does not exist, or if + // this is the window that changed the palette. + if ((hPalette != NULL) && ((HWND)wParam != hWnd)) { + // Select the palette into the device context + SelectPalette(hDC, hPalette, FALSE); + + // Map entries to system palette + RealizePalette(hDC); + + // Remap the current colors to the newly realized palette + UpdateColors(hDC); + return 0; + } + break; + + // Key press, check for arrow keys to do cube rotation. + case WM_KEYDOWN: + + switch (wParam) { + case VK_UP: + xRot -= 5.0f; + break; + + case VK_DOWN: + xRot += 5.0f; + break; + + case VK_LEFT: + yRot -= 5.0f; + break; + + case VK_RIGHT: + yRot += 5.0f; + break; + + case 'Q': + zRot += 5.0f; + break; + + case 'E': + zRot -= 5.0f; + break; + + case 'R': + xRot = 0; + yRot = 0; + zRot = 0; + break; + + case ' ': // 32 + polygonmode = !polygonmode; + break; + + default: + std::cout << "debug: nacisnieto nierozpoznany klawisz: " << (int)wParam << "\n"; + } + + xRot = (const int)xRot % 360; + yRot = (const int)yRot % 360; + zRot = (const int)zRot % 360; + + InvalidateRect(hWnd, NULL, FALSE); + break; + + // A menu command + case WM_COMMAND: + + switch (LOWORD(wParam)) { + + // Exit the program + case ID_FILE_EXIT: + DestroyWindow(hWnd); + break; + + // Display the about box + case ID_HELP_ABOUT: + DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG_ABOUT), hWnd, (DLGPROC)AboutDlgProc); + break; + + } + break; + + default: // Passes it on if unproccessed + return (DefWindowProc(hWnd, message, wParam, lParam)); + } + + return (0L); +} + + + + +// Dialog procedure. +BOOL APIENTRY AboutDlgProc(HWND hDlg, UINT message, UINT wParam, LONG lParam) { + + switch (message) { + // Initialize the dialog box + case WM_INITDIALOG: + int i; + GLenum glError; + + // glGetString demo + SetDlgItemText(hDlg, IDC_OPENGL_VENDOR, reinterpret_cast(glGetString(GL_VENDOR))); + SetDlgItemText(hDlg, IDC_OPENGL_RENDERER, (LPCSTR)glGetString(GL_RENDERER)); + SetDlgItemText(hDlg, IDC_OPENGL_VERSION, (LPCSTR)glGetString(GL_VERSION)); + SetDlgItemText(hDlg, IDC_OPENGL_EXTENSIONS, (LPCSTR)glGetString(GL_EXTENSIONS)); + + // gluGetString demo + SetDlgItemText(hDlg, IDC_GLU_VERSION, (LPCSTR)gluGetString(GLU_VERSION)); + SetDlgItemText(hDlg, IDC_GLU_EXTENSIONS, (LPCSTR)gluGetString(GLU_EXTENSIONS)); + + + // Display any recent error messages + i = 0; + do { + glError = glGetError(); + SetDlgItemText(hDlg, IDC_ERROR1 + i, (LPCSTR)gluErrorString(glError)); + i++; + } while (i < 6 && glError != GL_NO_ERROR); + + + return (TRUE); + + break; + + // Process command messages + case WM_COMMAND: + + // Validate and Make the changes + if (LOWORD(wParam) == IDOK) EndDialog(hDlg, TRUE); + break; + + // Closed from sysbox + case WM_CLOSE: + + EndDialog(hDlg, TRUE); + break; + + } + + return FALSE; +} \ No newline at end of file diff --git a/output.exe b/output.exe new file mode 100644 index 0000000..ae90d23 Binary files /dev/null and b/output.exe differ diff --git a/suzanne.obj b/suzanne.obj new file mode 100644 index 0000000..f416db8 --- /dev/null +++ b/suzanne.obj @@ -0,0 +1,2975 @@ +# Blender 4.2.1 LTS +# www.blender.org +o Suzanne +v 4.375000 1.640625 7.656250 +v -4.375000 1.640625 7.656250 +v 5.000000 0.937500 6.875000 +v -5.000000 0.937500 6.875000 +v 5.468750 0.546875 5.781250 +v -5.468750 0.546875 5.781250 +v 3.515625 -0.234375 6.171875 +v -3.515625 -0.234375 6.171875 +v 3.515625 0.312500 7.187500 +v -3.515625 0.312500 7.187500 +v 3.515625 1.328125 7.812500 +v -3.515625 1.328125 7.812500 +v 2.734375 1.640625 7.968750 +v -2.734375 1.640625 7.968750 +v 2.031250 0.937500 7.421875 +v -2.031250 0.937500 7.421875 +v 1.562500 0.546875 6.484375 +v -1.562500 0.546875 6.484375 +v 0.781250 2.421875 6.562500 +v -0.781250 2.421875 6.562500 +v 1.406250 2.421875 7.421875 +v -1.406250 2.421875 7.421875 +v 2.421875 2.421875 7.968750 +v -2.421875 2.421875 7.968750 +v 2.734375 3.281250 7.968750 +v -2.734375 3.281250 7.968750 +v 2.031250 3.906250 7.421875 +v -2.031250 3.906250 7.421875 +v 1.562500 4.375000 6.484375 +v -1.562500 4.375000 6.484375 +v 3.515625 5.156250 6.171875 +v -3.515625 5.156250 6.171875 +v 3.515625 4.531250 7.187500 +v -3.515625 4.531250 7.187500 +v 3.515625 3.593750 7.812500 +v -3.515625 3.593750 7.812500 +v 4.375000 3.281250 7.656250 +v -4.375000 3.281250 7.656250 +v 5.000000 3.906250 6.875000 +v -5.000000 3.906250 6.875000 +v 5.468750 4.375000 5.781250 +v -5.468750 4.375000 5.781250 +v 6.250000 2.421875 5.625000 +v -6.250000 2.421875 5.625000 +v 5.625000 2.421875 6.718750 +v -5.625000 2.421875 6.718750 +v 4.687500 2.421875 7.578125 +v -4.687500 2.421875 7.578125 +v 4.765625 2.421875 7.734375 +v -4.765625 2.421875 7.734375 +v 4.453125 3.359375 7.812500 +v -4.453125 3.359375 7.812500 +v 3.515625 3.750000 8.046875 +v -3.515625 3.750000 8.046875 +v 2.656250 3.359375 8.203125 +v -2.656250 3.359375 8.203125 +v 2.265625 2.421875 8.203125 +v -2.265625 2.421875 8.203125 +v 2.656250 1.562500 8.203125 +v -2.656250 1.562500 8.203125 +v 3.515625 2.421875 8.281250 +v -3.515625 2.421875 8.281250 +v 3.515625 1.171875 8.046875 +v -3.515625 1.171875 8.046875 +v 4.453125 1.562500 7.812500 +v -4.453125 1.562500 7.812500 +v 0.000000 4.296875 7.421875 +v 0.000000 3.515625 8.203125 +v 0.000000 -6.796875 7.343750 +v 0.000000 -3.203125 7.812500 +v 0.000000 -1.875000 7.968750 +v 0.000000 -7.734375 7.187500 +v 0.000000 4.062500 6.015625 +v 0.000000 5.703125 5.703125 +v 0.000000 8.984375 -5.468750 +v 0.000000 5.625000 -8.515625 +v 0.000000 0.703125 -8.281250 +v 0.000000 -3.828125 -3.515625 +v 2.031250 -1.875000 5.625000 +v -2.031250 -1.875000 5.625000 +v 3.125000 -4.375000 5.703125 +v -3.125000 -4.375000 5.703125 +v 3.515625 -6.953125 5.703125 +v -3.515625 -6.953125 5.703125 +v 3.671875 -8.906250 5.312500 +v -3.671875 -8.906250 5.312500 +v 3.281250 -9.453125 5.234375 +v -3.281250 -9.453125 5.234375 +v 1.796875 -9.687500 5.546875 +v -1.796875 -9.687500 5.546875 +v 0.000000 -9.843750 5.781250 +v 4.375000 -1.406250 5.312500 +v -4.375000 -1.406250 5.312500 +v 6.328125 -0.390625 5.390625 +v -6.328125 -0.390625 5.390625 +v 8.281250 1.484375 4.453125 +v -8.281250 1.484375 4.453125 +v 8.593750 4.296875 5.937500 +v -8.593750 4.296875 5.937500 +v 7.109375 4.843750 6.250000 +v -7.109375 4.843750 6.250000 +v 4.921875 6.015625 6.875000 +v -4.921875 6.015625 6.875000 +v 3.203125 7.578125 7.343750 +v -3.203125 7.578125 7.343750 +v 1.562500 7.187500 7.578125 +v -1.562500 7.187500 7.578125 +v 0.625000 4.921875 7.500000 +v -0.625000 4.921875 7.500000 +v 1.640625 4.140625 7.734375 +v -1.640625 4.140625 7.734375 +v 1.250000 3.046875 7.656250 +v -1.250000 3.046875 7.656250 +v 2.031250 0.937500 7.421875 +v -2.031250 0.937500 7.421875 +v 3.750000 0.156250 7.031250 +v -3.750000 0.156250 7.031250 +v 4.921875 0.625000 6.718750 +v -4.921875 0.625000 6.718750 +v 6.250000 1.875000 6.484375 +v -6.250000 1.875000 6.484375 +v 6.406250 2.968750 6.484375 +v -6.406250 2.968750 6.484375 +v 6.015625 3.750000 6.640625 +v -6.015625 3.750000 6.640625 +v 4.296875 4.375000 7.187500 +v -4.296875 4.375000 7.187500 +v 2.500000 4.687500 7.578125 +v -2.500000 4.687500 7.578125 +v 0.000000 -7.656250 7.343750 +v 1.093750 -7.187500 7.343750 +v -1.093750 -7.187500 7.343750 +v 1.171875 -8.359375 7.109375 +v -1.171875 -8.359375 7.109375 +v 0.625000 -8.828125 6.953125 +v -0.625000 -8.828125 6.953125 +v 0.000000 -8.906250 6.875000 +v 0.000000 -1.953125 7.500000 +v 0.000000 -1.406250 7.421875 +v 1.015625 -1.484375 7.421875 +v -1.015625 -1.484375 7.421875 +v 1.250000 -2.265625 7.500000 +v -1.250000 -2.265625 7.500000 +v 0.859375 -2.890625 7.421875 +v -0.859375 -2.890625 7.421875 +v 3.984375 -0.468750 6.718750 +v -3.984375 -0.468750 6.718750 +v 6.171875 0.546875 6.250000 +v -6.171875 0.546875 6.250000 +v 7.265625 2.031250 6.015625 +v -7.265625 2.031250 6.015625 +v 7.421875 3.750000 6.562500 +v -7.421875 3.750000 6.562500 +v 6.875000 4.140625 7.265625 +v -6.875000 4.140625 7.265625 +v 4.375000 5.468750 7.968750 +v -4.375000 5.468750 7.968750 +v 3.125000 6.406250 8.359375 +v -3.125000 6.406250 8.359375 +v 2.031250 6.171875 8.515625 +v -2.031250 6.171875 8.515625 +v 1.015625 4.296875 8.437500 +v -1.015625 4.296875 8.437500 +v 1.250000 -1.015625 8.125000 +v -1.250000 -1.015625 8.125000 +v 2.109375 -4.453125 7.109375 +v -2.109375 -4.453125 7.109375 +v 2.500000 -7.031250 6.875000 +v -2.500000 -7.031250 6.875000 +v 2.656250 -8.203125 6.640625 +v -2.656250 -8.203125 6.640625 +v 2.343750 -9.140625 6.328125 +v -2.343750 -9.140625 6.328125 +v 1.640625 -9.296875 6.328125 +v -1.640625 -9.296875 6.328125 +v 0.000000 -9.453125 6.406250 +v 0.000000 0.468750 7.265625 +v 0.000000 2.109375 7.656250 +v 3.281250 4.765625 7.421875 +v -3.281250 4.765625 7.421875 +v 1.640625 1.406250 7.500000 +v -1.640625 1.406250 7.500000 +v 1.328125 2.109375 7.578125 +v -1.328125 2.109375 7.578125 +v 1.171875 -6.875000 7.343750 +v -1.171875 -6.875000 7.343750 +v 0.781250 -4.453125 7.500000 +v -0.781250 -4.453125 7.500000 +v 0.000000 -4.453125 7.500000 +v 0.000000 -3.281250 7.421875 +v 0.937500 -2.734375 7.812500 +v -0.937500 -2.734375 7.812500 +v 1.328125 -2.265625 7.968750 +v -1.328125 -2.265625 7.968750 +v 1.093750 -1.328125 7.812500 +v -1.093750 -1.328125 7.812500 +v 0.390625 -1.250000 7.812500 +v -0.390625 -1.250000 7.812500 +v 0.000000 -2.031250 8.281250 +v 0.468750 -1.484375 8.125000 +v -0.468750 -1.484375 8.125000 +v 0.937500 -1.562500 8.125000 +v -0.937500 -1.562500 8.125000 +v 1.093750 -2.265625 8.281250 +v -1.093750 -2.265625 8.281250 +v 0.781250 -2.500000 8.046875 +v -0.781250 -2.500000 8.046875 +v 0.000000 -2.890625 8.046875 +v 2.578125 -3.125000 5.546875 +v -2.578125 -3.125000 5.546875 +v 1.640625 -2.421875 7.109375 +v -1.640625 -2.421875 7.109375 +v 1.796875 -3.125000 7.109375 +v -1.796875 -3.125000 7.109375 +v 2.343750 -2.500000 5.546875 +v -2.343750 -2.500000 5.546875 +v 0.000000 -8.750000 6.875000 +v 0.468750 -8.671875 6.875000 +v -0.468750 -8.671875 6.875000 +v 0.937500 -8.203125 7.109375 +v -0.937500 -8.203125 7.109375 +v 0.937500 -7.421875 7.265625 +v -0.937500 -7.421875 7.265625 +v 0.000000 -7.812500 6.562500 +v 0.937500 -7.500000 6.640625 +v -0.937500 -7.500000 6.640625 +v 0.937500 -8.125000 6.406250 +v -0.937500 -8.125000 6.406250 +v 0.468750 -8.515625 6.328125 +v -0.468750 -8.515625 6.328125 +v 0.000000 -8.593750 6.328125 +v 1.718750 2.187500 7.812500 +v -1.718750 2.187500 7.812500 +v 1.875000 1.562500 7.734375 +v -1.875000 1.562500 7.734375 +v 3.359375 4.296875 7.578125 +v -3.359375 4.296875 7.578125 +v 2.734375 4.218750 7.734375 +v -2.734375 4.218750 7.734375 +v 4.218750 3.984375 7.734375 +v -4.218750 3.984375 7.734375 +v 5.625000 3.515625 6.953125 +v -5.625000 3.515625 6.953125 +v 5.859375 2.890625 6.875000 +v -5.859375 2.890625 6.875000 +v 5.781250 1.953125 6.796875 +v -5.781250 1.953125 6.796875 +v 4.765625 1.015625 7.187500 +v -4.765625 1.015625 7.187500 +v 3.750000 0.625000 7.421875 +v -3.750000 0.625000 7.421875 +v 2.265625 1.093750 7.812500 +v -2.265625 1.093750 7.812500 +v 1.796875 2.968750 7.812500 +v -1.796875 2.968750 7.812500 +v 2.109375 3.750000 7.812500 +v -2.109375 3.750000 7.812500 +v 2.343750 3.593750 7.578125 +v -2.343750 3.593750 7.578125 +v 1.953125 2.968750 7.578125 +v -1.953125 2.968750 7.578125 +v 2.421875 1.250000 7.578125 +v -2.421875 1.250000 7.578125 +v 3.750000 0.859375 7.265625 +v -3.750000 0.859375 7.265625 +v 4.609375 1.171875 7.031250 +v -4.609375 1.171875 7.031250 +v 5.468750 2.109375 6.718750 +v -5.468750 2.109375 6.718750 +v 5.546875 2.812500 6.718750 +v -5.546875 2.812500 6.718750 +v 5.312500 3.359375 6.796875 +v -5.312500 3.359375 6.796875 +v 4.140625 3.906250 7.500000 +v -4.140625 3.906250 7.500000 +v 2.812500 3.984375 7.656250 +v -2.812500 3.984375 7.656250 +v 3.359375 4.062500 7.500000 +v -3.359375 4.062500 7.500000 +v 2.031250 1.718750 7.500000 +v -2.031250 1.718750 7.500000 +v 1.953125 2.265625 7.500000 +v -1.953125 2.265625 7.500000 +v 1.093750 4.609375 6.093750 +v -1.093750 4.609375 6.093750 +v 1.953125 6.640625 6.171875 +v -1.953125 6.640625 6.171875 +v 3.359375 6.875000 5.937500 +v -3.359375 6.875000 5.937500 +v 4.843750 5.546875 5.546875 +v -4.843750 5.546875 5.546875 +v 6.796875 4.531250 4.921875 +v -6.796875 4.531250 4.921875 +v 7.968750 4.062500 4.609375 +v -7.968750 4.062500 4.609375 +v 7.734375 1.640625 3.750000 +v -7.734375 1.640625 3.750000 +v 6.015625 0.000000 4.140625 +v -6.015625 0.000000 4.140625 +v 4.375000 -0.937500 4.687500 +v -4.375000 -0.937500 4.687500 +v 0.000000 8.984375 2.890625 +v 0.000000 9.843750 -0.781250 +v 0.000000 -1.953125 -6.718750 +v 0.000000 -4.609375 1.875000 +v 0.000000 -9.765625 4.609375 +v 0.000000 -8.046875 3.437500 +v 0.000000 -5.703125 3.203125 +v 0.000000 -4.843750 2.812500 +v 8.515625 2.343750 0.546875 +v -8.515625 2.343750 0.546875 +v 8.593750 3.203125 -0.468750 +v -8.593750 3.203125 -0.468750 +v 7.734375 2.656250 -4.375000 +v -7.734375 2.656250 -4.375000 +v 4.609375 4.375000 -7.031250 +v -4.609375 4.375000 -7.031250 +v 7.343750 -0.468750 0.703125 +v -7.343750 -0.468750 0.703125 +v 5.937500 -1.250000 -1.640625 +v -5.937500 -1.250000 -1.640625 +v 6.406250 -0.078125 -4.296875 +v -6.406250 -0.078125 -4.296875 +v 3.359375 0.546875 -6.640625 +v -3.359375 0.546875 -6.640625 +v 2.343750 -3.515625 4.062500 +v -2.343750 -3.515625 4.062500 +v 1.796875 -4.140625 2.578125 +v -1.796875 -4.140625 2.578125 +v 2.890625 -7.109375 3.828125 +v -2.890625 -7.109375 3.828125 +v 2.500000 -5.000000 3.906250 +v -2.500000 -5.000000 3.906250 +v 3.281250 -9.140625 3.984375 +v -3.281250 -9.140625 3.984375 +v 1.406250 -7.578125 3.671875 +v -1.406250 -7.578125 3.671875 +v 1.250000 -5.390625 3.593750 +v -1.250000 -5.390625 3.593750 +v 1.640625 -9.453125 4.375000 +v -1.640625 -9.453125 4.375000 +v 2.187500 -2.812500 4.296875 +v -2.187500 -2.812500 4.296875 +v 2.109375 -2.265625 4.687500 +v -2.109375 -2.265625 4.687500 +v 2.031250 -1.718750 5.000000 +v -2.031250 -1.718750 5.000000 +v 2.109375 -3.906250 1.640625 +v -2.109375 -3.906250 1.640625 +v 2.968750 -3.125000 -2.656250 +v -2.968750 -3.125000 -2.656250 +v 3.437500 -1.484375 -5.390625 +v -3.437500 -1.484375 -5.390625 +v 4.531250 8.671875 -3.828125 +v -4.531250 8.671875 -3.828125 +v 4.531250 9.296875 -0.703125 +v -4.531250 9.296875 -0.703125 +v 4.531250 8.515625 2.343750 +v -4.531250 8.515625 2.343750 +v 4.609375 5.234375 4.296875 +v -4.609375 5.234375 4.296875 +v 7.265625 4.062500 3.359375 +v -7.265625 4.062500 3.359375 +v 6.328125 4.531250 2.812500 +v -6.328125 4.531250 2.812500 +v 6.406250 7.031250 0.546875 +v -6.406250 7.031250 0.546875 +v 7.968750 5.625000 1.250000 +v -7.968750 5.625000 1.250000 +v 7.968750 6.171875 -1.171875 +v -7.968750 6.171875 -1.171875 +v 6.406250 7.500000 -1.953125 +v -6.406250 7.500000 -1.953125 +v 6.406250 6.796875 -4.453125 +v -6.406250 6.796875 -4.453125 +v 7.968750 5.390625 -3.593750 +v -7.968750 5.390625 -3.593750 +v 6.171875 3.281250 -5.859375 +v -6.171875 3.281250 -5.859375 +v 4.843750 0.234375 -5.468750 +v -4.843750 0.234375 -5.468750 +v 8.203125 3.281250 -2.031250 +v -8.203125 3.281250 -2.031250 +v 4.062500 -1.718750 1.484375 +v -4.062500 -1.718750 1.484375 +v 4.296875 -1.953125 -2.109375 +v -4.296875 -1.953125 -2.109375 +v 8.906250 4.062500 -2.343750 +v -8.906250 4.062500 -2.343750 +v 7.734375 -1.406250 -1.250000 +v -7.734375 -1.406250 -1.250000 +v 10.390625 -1.015625 -3.281250 +v -10.390625 -1.015625 -3.281250 +v 12.812500 0.546875 -4.296875 +v -12.812500 0.546875 -4.296875 +v 13.515625 3.203125 -4.218750 +v -13.515625 3.203125 -4.218750 +v 12.343750 5.078125 -4.218750 +v -12.343750 5.078125 -4.218750 +v 10.234375 4.765625 -3.125000 +v -10.234375 4.765625 -3.125000 +v 10.156250 4.140625 -2.890625 +v -10.156250 4.140625 -2.890625 +v 11.875000 4.375000 -3.906250 +v -11.875000 4.375000 -3.906250 +v 12.656250 2.890625 -4.062500 +v -12.656250 2.890625 -4.062500 +v 12.109375 0.781250 -4.062500 +v -12.109375 0.781250 -4.062500 +v 10.312500 -0.390625 -3.046875 +v -10.312500 -0.390625 -3.046875 +v 8.281250 -0.703125 -1.328125 +v -8.281250 -0.703125 -1.328125 +v 9.218750 3.593750 -2.187500 +v -9.218750 3.593750 -2.187500 +v 9.453125 3.046875 -2.890625 +v -9.453125 3.046875 -2.890625 +v 8.828125 -0.234375 -2.109375 +v -8.828125 -0.234375 -2.109375 +v 10.390625 0.000000 -3.671875 +v -10.390625 0.000000 -3.671875 +v 11.875000 0.937500 -4.453125 +v -11.875000 0.937500 -4.453125 +v 12.343750 2.500000 -4.453125 +v -12.343750 2.500000 -4.453125 +v 11.718750 3.593750 -4.375000 +v -11.718750 3.593750 -4.375000 +v 10.234375 3.437500 -3.593750 +v -10.234375 3.437500 -3.593750 +v 8.437500 2.890625 -2.109375 +v -8.437500 2.890625 -2.109375 +v 8.359375 1.718750 -2.734375 +v -8.359375 1.718750 -2.734375 +v 7.578125 0.937500 -2.734375 +v -7.578125 0.937500 -2.734375 +v 8.203125 0.859375 -2.734375 +v -8.203125 0.859375 -2.734375 +v 8.437500 0.156250 -2.734375 +v -8.437500 0.156250 -2.734375 +v 8.125000 -0.156250 -2.734375 +v -8.125000 -0.156250 -2.734375 +v 7.265625 0.000000 -0.703125 +v -7.265625 0.000000 -0.703125 +v 7.187500 -0.234375 -1.718750 +v -7.187500 -0.234375 -1.718750 +v 7.187500 0.390625 -1.875000 +v -7.187500 0.390625 -1.875000 +v 7.968750 2.031250 -2.109375 +v -7.968750 2.031250 -2.109375 +v 8.906250 2.421875 -2.656250 +v -8.906250 2.421875 -2.656250 +v 8.906250 2.343750 -3.203125 +v -8.906250 2.343750 -3.203125 +v 8.125000 -0.156250 -3.203125 +v -8.125000 -0.156250 -3.203125 +v 8.515625 0.156250 -3.203125 +v -8.515625 0.156250 -3.203125 +v 8.281250 0.781250 -3.203125 +v -8.281250 0.781250 -3.203125 +v 7.656250 0.937500 -3.203125 +v -7.656250 0.937500 -3.203125 +v 8.437500 1.718750 -3.203125 +v -8.437500 1.718750 -3.203125 +v 10.390625 3.281250 -4.140625 +v -10.390625 3.281250 -4.140625 +v 11.875000 3.437500 -4.843750 +v -11.875000 3.437500 -4.843750 +v 12.578125 2.421875 -4.921875 +v -12.578125 2.421875 -4.921875 +v 12.109375 0.859375 -4.843750 +v -12.109375 0.859375 -4.843750 +v 10.468750 0.000000 -4.218750 +v -10.468750 0.000000 -4.218750 +v 8.828125 -0.156250 -2.656250 +v -8.828125 -0.156250 -2.656250 +v 9.531250 2.890625 -3.437500 +v -9.531250 2.890625 -3.437500 +v 8.906250 1.093750 -3.281250 +v -8.906250 1.093750 -3.281250 +v 9.375000 0.625000 -3.359375 +v -9.375000 0.625000 -3.359375 +v 10.000000 1.250000 -3.671875 +v -10.000000 1.250000 -3.671875 +v 9.609375 1.718750 -3.515625 +v -9.609375 1.718750 -3.515625 +v 10.156250 2.343750 -3.750000 +v -10.156250 2.343750 -3.750000 +v 10.546875 1.875000 -3.828125 +v -10.546875 1.875000 -3.828125 +v 11.093750 2.109375 -3.906250 +v -11.093750 2.109375 -3.906250 +v 10.859375 2.734375 -3.906250 +v -10.859375 2.734375 -3.906250 +v 10.234375 4.375000 -4.843750 +v -10.234375 4.375000 -4.843750 +v 12.500000 4.687500 -5.468750 +v -12.500000 4.687500 -5.468750 +v 13.671875 2.968750 -5.000000 +v -13.671875 2.968750 -5.000000 +v 13.125000 0.546875 -5.312500 +v -13.125000 0.546875 -5.312500 +v 10.390625 -0.859375 -4.921875 +v -10.390625 -0.859375 -4.921875 +v 7.890625 -1.250000 -3.281250 +v -7.890625 -1.250000 -3.281250 +v 8.593750 3.828125 -3.828125 +v -8.593750 3.828125 -3.828125 +vn 0.6617 -0.2026 0.7219 +vn -0.6617 -0.2026 0.7219 +vn 0.8268 -0.3051 0.4725 +vn -0.8268 -0.3051 0.4725 +vn 0.4076 -0.7905 0.4570 +vn -0.4076 -0.7905 0.4570 +vn 0.3791 -0.5163 0.7679 +vn -0.3791 -0.5163 0.7679 +vn -0.0859 -0.5222 0.8485 +vn 0.0859 -0.5222 0.8485 +vn -0.2664 -0.8487 0.4570 +vn 0.2664 -0.8487 0.4570 +vn -0.7824 -0.3294 0.5285 +vn 0.7606 -0.3400 0.5531 +vn -0.4706 -0.1981 0.8598 +vn 0.4706 -0.1981 0.8598 +vn -0.4649 0.1958 0.8634 +vn 0.4649 0.1958 0.8634 +vn -0.7656 0.3223 0.5568 +vn 0.7683 0.3293 0.5488 +vn -0.2560 0.8073 0.5317 +vn 0.2487 0.8249 0.5076 +vn -0.0821 0.6023 0.7940 +vn 0.1017 0.5518 0.8277 +vn 0.3329 0.5231 0.7846 +vn -0.3861 0.5446 0.7445 +vn 0.4246 0.7711 0.4745 +vn -0.4059 0.7641 0.5014 +vn 0.8251 0.2968 0.4808 +vn -0.8299 0.2940 0.4742 +vn 0.6888 0.1868 0.7005 +vn -0.6617 0.2026 0.7219 +vn 0.8400 0.3436 -0.4200 +vn -0.7816 0.3058 -0.5437 +vn 0.2074 0.8296 -0.5185 +vn -0.2037 0.8146 -0.5431 +vn -0.4056 0.7605 -0.5070 +vn 0.4381 0.7988 -0.4123 +vn -0.8642 0.3143 -0.3928 +vn 0.7861 0.3276 -0.5241 +vn -0.7783 -0.3537 -0.5188 +vn 0.7782 -0.3537 -0.5188 +vn -0.4381 -0.7988 -0.4123 +vn 0.4381 -0.7988 -0.4123 +vn 0.2037 -0.8146 -0.5431 +vn -0.2037 -0.8146 -0.5431 +vn 0.7683 -0.3293 -0.5488 +vn -0.7683 -0.3293 -0.5488 +vn 0.4000 -0.0623 0.9144 +vn -0.4000 -0.0623 0.9144 +vn 0.3069 -0.1754 0.9354 +vn -0.3069 -0.1754 0.9354 +vn 0.0945 -0.1835 0.9785 +vn -0.0945 -0.1835 0.9785 +vn -0.0624 -0.0283 0.9977 +vn 0.0624 -0.0283 0.9977 +vn -0.0624 0.0260 0.9977 +vn 0.0624 0.0260 0.9977 +vn 0.0996 0.1729 0.9799 +vn -0.0996 0.1729 0.9799 +vn 0.3036 0.1656 0.9383 +vn -0.3036 0.1656 0.9383 +vn 0.4002 0.0572 0.9147 +vn -0.4002 0.0572 0.9147 +vn 0.1367 -0.8748 0.4648 +vn -0.1054 -0.8433 0.5270 +vn 0.2303 -0.8656 0.4447 +vn -0.1916 -0.8620 0.4693 +vn 0.5788 -0.5049 0.6404 +vn -0.5788 -0.5049 0.6404 +vn 0.7763 -0.0633 0.6272 +vn -0.7763 -0.0633 0.6272 +vn 0.7471 0.1132 0.6550 +vn -0.7471 0.1132 0.6550 +vn 0.3747 -0.8345 0.4040 +vn -0.3747 -0.8345 0.4040 +vn 0.3557 -0.7290 0.5848 +vn -0.4177 -0.5751 0.7034 +vn 0.6947 -0.4197 0.5841 +vn -0.6947 -0.4197 0.5841 +vn 0.7028 -0.3915 0.5939 +vn -0.5537 -0.2978 0.7777 +vn 0.3127 0.3425 0.8860 +vn -0.8227 0.3606 0.4395 +vn 0.5091 0.6482 0.5663 +vn -0.5041 0.6448 0.5745 +vn 0.5977 0.5565 0.5771 +vn -0.5977 0.5565 0.5771 +vn -0.0486 0.6560 0.7532 +vn 0.0371 0.6685 0.7428 +vn -0.7104 0.2715 0.6494 +vn 0.7386 0.3768 0.5590 +vn -0.6013 0.5262 0.6013 +vn 0.5774 0.5774 0.5774 +vn 0.5070 -0.6281 0.5903 +vn -0.5364 -0.3230 0.7797 +vn 0.2226 -0.4694 0.8545 +vn -0.2226 -0.4694 0.8545 +vn -0.0348 -0.5792 0.8144 +vn 0.1073 -0.5010 0.8588 +vn -0.0899 -0.7843 0.6138 +vn 0.0770 -0.5759 0.8139 +vn 0.0547 -0.1695 0.9840 +vn -0.0279 -0.8645 0.5019 +vn 0.4260 -0.0609 0.9027 +vn -0.1687 -0.3128 0.9347 +vn 0.3352 -0.1828 0.9243 +vn -0.4350 -0.1812 0.8820 +vn 0.3579 -0.3068 0.8819 +vn -0.3223 -0.2762 0.9054 +vn 0.3069 0.2113 0.9280 +vn -0.4815 -0.2408 0.8427 +vn -0.1598 0.3903 0.9067 +vn 0.1598 0.3903 0.9067 +vn 0.6819 -0.2915 0.6709 +vn -0.1854 -0.4956 0.8485 +vn 0.0585 -0.0781 0.9952 +vn -0.0585 -0.0781 0.9952 +vn -0.0066 -0.2316 0.9728 +vn -0.0585 -0.0845 0.9947 +vn 0.1008 -0.7103 0.6966 +vn -0.1008 -0.7103 0.6966 +vn 0.1322 -0.5947 0.7930 +vn -0.1322 -0.5947 0.7930 +vn 0.3128 -0.1662 0.9352 +vn -0.3143 -0.3928 0.8642 +vn 0.3288 -0.0360 0.9437 +vn -0.3288 -0.0360 0.9437 +vn 0.3233 -0.0808 0.9429 +vn -0.3233 -0.0808 0.9429 +vn -0.0232 0.0511 0.9984 +vn -0.0000 0.0665 0.9978 +vn -0.0043 -0.0651 0.9979 +vn -0.0000 -0.0665 0.9978 +vn -0.0000 -0.0000 1.0000 +vn 0.8447 -0.5335 0.0445 +vn -0.8447 -0.5335 0.0445 +vn 0.9500 0.2692 -0.1583 +vn -0.9500 0.2692 -0.1583 +vn 0.0693 0.9004 -0.4294 +vn -0.1018 0.9165 -0.3870 +vn -1.0000 -0.0000 -0.0000 +vn 0.6905 0.5492 0.4708 +vn 0.4071 -0.8956 0.1791 +vn -0.4319 -0.8639 0.2592 +vn 0.2873 -0.5747 0.7663 +vn -0.2873 -0.5747 0.7663 +vn -0.6326 0.5353 0.5596 +vn 0.6326 0.5353 0.5596 +vn 0.0862 0.7759 0.6250 +vn -0.0862 0.7759 0.6250 +vn 0.7532 0.2870 0.5918 +vn -0.7639 0.2971 0.5729 +vn 0.3416 -0.5409 0.7686 +vn -0.3416 -0.5409 0.7686 +vn 0.0502 0.2343 0.9709 +vn -0.0375 0.2247 0.9737 +vn -0.1304 -0.6087 0.7826 +vn 0.1304 -0.6087 0.7826 +vn -0.5059 0.0716 0.8596 +vn 0.5059 0.0716 0.8596 +vn -0.5774 -0.5774 0.5774 +vn 0.5774 -0.5774 0.5774 +vn 0.5460 -0.4310 0.7184 +vn -0.3319 0.0738 0.9404 +vn 0.3231 0.0311 0.9459 +vn -0.2815 0.0662 0.9573 +vn 0.7357 0.3910 0.5531 +vn -0.8753 0.2059 0.4376 +vn 0.8480 0.3180 0.4240 +vn -0.8973 0.1994 0.3938 +vn 0.8505 0.3798 0.3638 +vn -0.8505 0.3798 0.3638 +vn 0.1783 -0.4161 0.8917 +vn -0.2524 -0.8655 0.4327 +vn -0.1296 -0.1945 0.9723 +vn 0.1296 -0.1945 0.9723 +vn -0.4472 -0.0000 0.8944 +vn 0.4472 -0.0000 0.8944 +vn -0.1582 0.9494 0.2713 +vn 0.1582 0.9494 0.2713 +vn -0.6463 0.7337 0.2096 +vn 0.6463 0.7337 0.2096 +vn 1.0000 -0.0000 -0.0000 +vn 0.3051 -0.9450 0.1181 +vn -0.3051 -0.9450 0.1181 +vn 0.0217 -0.3031 0.9527 +vn -0.0217 -0.3031 0.9527 +vn 0.1353 -0.3479 0.9277 +vn -0.1353 -0.3479 0.9277 +vn -0.4681 -0.2239 0.8548 +vn 0.4681 -0.2239 0.8548 +vn -0.2710 0.0271 0.9622 +vn 0.2710 0.0271 0.9622 +vn -0.1717 -0.0090 0.9851 +vn 0.2595 0.1038 0.9601 +vn -0.4332 -0.4874 0.7581 +vn 0.6684 -0.4595 0.5849 +vn -0.1599 -0.8797 0.4478 +vn 0.1599 -0.8797 0.4478 +vn 0.3900 -0.5895 0.7074 +vn -0.3900 -0.5895 0.7074 +vn 0.6547 -0.4589 0.6007 +vn -0.6547 -0.4589 0.6007 +vn 0.5378 -0.1144 0.8353 +vn -0.5378 -0.1144 0.8353 +vn 0.5657 0.1197 0.8159 +vn -0.5774 0.1155 0.8083 +vn 0.4082 0.4082 0.8165 +vn -0.5214 0.6574 0.5441 +vn 0.1796 0.7882 0.5886 +vn -0.1796 0.7882 0.5886 +vn 0.1881 0.3387 0.9219 +vn -0.1881 0.3387 0.9219 +vn -0.0870 0.2756 0.9573 +vn 0.0870 0.2756 0.9573 +vn 0.2804 -0.2181 0.9348 +vn -0.3553 -0.5739 0.7379 +vn 0.3015 -0.3015 0.9045 +vn -0.3015 -0.3015 0.9045 +vn -0.3766 -0.8339 0.4035 +vn 0.0631 -0.3156 0.9468 +vn 0.0823 -0.7822 0.6175 +vn 0.2016 -0.9071 0.3696 +vn -0.3707 -0.2851 0.8839 +vn 0.3707 -0.2851 0.8839 +vn -0.2692 -0.0577 0.9614 +vn 0.4568 0.0508 0.8881 +vn -0.2797 0.5245 0.8042 +vn 0.2797 0.5245 0.8042 +vn -0.0213 0.5546 0.8319 +vn 0.0487 0.6815 0.7302 +vn 0.3778 0.6342 0.6746 +vn -0.3378 0.5221 0.7831 +vn 0.4988 0.5300 0.6858 +vn -0.4988 0.5300 0.6858 +vn 0.5425 -0.3391 0.7686 +vn -0.5425 -0.3391 0.7686 +vn 0.8305 -0.0615 0.5536 +vn -0.8305 -0.0615 0.5536 +vn 0.7814 0.1116 0.6140 +vn -0.7814 0.1116 0.6140 +vn -0.4338 0.8888 -0.1481 +vn 0.4338 0.8888 -0.1481 +vn -0.8515 0.3744 -0.3670 +vn 0.8515 0.3744 -0.3670 +vn -0.2664 0.8710 -0.4127 +vn 0.2197 0.8626 -0.4557 +vn 0.5932 0.7445 -0.3063 +vn -0.5914 0.7489 -0.2991 +vn 0.3714 0.8685 -0.3284 +vn -0.3653 0.8833 -0.2938 +vn 0.2901 0.9141 -0.2833 +vn -0.2901 0.9141 -0.2833 +vn 0.8873 0.1343 -0.4412 +vn -0.7964 0.1323 -0.5901 +vn 0.5108 -0.6649 -0.5450 +vn -0.5108 -0.6649 -0.5450 +vn 0.3695 -0.8566 -0.3601 +vn -0.3695 -0.8566 -0.3601 +vn 0.3617 -0.3858 -0.8487 +vn -0.1649 -0.6644 -0.7289 +vn 0.1952 -0.0976 -0.9759 +vn -0.3011 -0.0125 -0.9535 +vn -0.0107 -0.5633 -0.8262 +vn -0.2562 -0.3112 -0.9152 +vn 0.1533 -0.9649 -0.2134 +vn -0.1533 -0.9649 -0.2134 +vn 0.1260 -0.9624 -0.2406 +vn -0.1260 -0.9624 -0.2406 +vn 0.9396 0.1573 -0.3041 +vn -0.9396 0.1573 -0.3041 +vn 0.9278 0.1838 -0.3246 +vn -0.9278 0.1838 -0.3246 +vn 0.2192 0.0766 -0.9727 +vn -0.2192 0.0766 -0.9727 +vn 0.1211 -0.0530 -0.9912 +vn 0.1497 -0.3635 -0.9195 +vn 0.9094 0.1371 -0.3927 +vn -0.3706 -0.6780 -0.6349 +vn 0.9202 0.1355 -0.3672 +vn -0.9202 0.1355 -0.3672 +vn 0.9173 0.3440 -0.2007 +vn -0.9457 0.2673 -0.1850 +vn 0.9004 0.3642 -0.2380 +vn -0.9337 0.2813 -0.2215 +vn 0.8945 0.4337 0.1084 +vn -0.9501 0.2455 -0.1922 +vn 0.1596 -0.9577 -0.2394 +vn -0.1835 -0.7864 -0.5898 +vn 0.3693 -0.4712 -0.8010 +vn -0.3727 -0.4759 -0.7966 +vn 0.2986 -0.8236 -0.4821 +vn -0.3263 -0.8342 -0.4446 +vn 0.2995 -0.9442 -0.1368 +vn -0.2995 -0.9442 -0.1368 +vn 0.3287 -0.9163 -0.2291 +vn -0.3287 -0.9163 -0.2291 +vn 0.8305 0.3333 -0.4463 +vn -0.8642 -0.4737 0.1696 +vn 0.9166 -0.3740 0.1414 +vn -0.9166 -0.3740 0.1414 +vn 0.2950 -0.0454 -0.9544 +vn -0.4189 -0.2265 -0.8793 +vn 0.1272 0.9658 0.2260 +vn -0.1119 0.9626 0.2468 +vn 0.1320 0.9750 -0.1788 +vn -0.1320 0.9750 -0.1788 +vn 0.3878 0.6192 -0.6828 +vn -0.3878 0.6192 -0.6828 +vn 0.4951 0.8618 -0.1100 +vn -0.4951 0.8618 -0.1100 +vn 0.2561 0.6447 0.7202 +vn -0.2561 0.6447 0.7202 +vn 0.5966 0.7888 0.1479 +vn -0.5966 0.7888 0.1479 +vn 0.7125 0.6755 -0.1900 +vn -0.7125 0.6755 -0.1900 +vn 0.7104 0.1364 -0.6904 +vn -0.6304 0.2517 -0.7343 +vn 0.6823 0.2318 -0.6933 +vn -0.6823 0.2318 -0.6933 +vn 0.6574 0.7254 -0.2040 +vn -0.6574 0.7254 -0.2040 +vn 0.7289 0.6729 0.1262 +vn -0.7289 0.6729 0.1262 +vn 0.7791 0.4074 0.4764 +vn -0.7791 0.4074 0.4764 +vn 0.3669 0.8840 -0.2898 +vn -0.3238 0.9434 -0.0720 +vn 0.2854 0.6237 0.7277 +vn -0.1548 0.5080 0.8473 +vn -0.1681 0.1005 -0.9806 +vn 0.1681 0.1005 -0.9806 +vn 0.2925 0.5674 0.7697 +vn -0.2925 0.5674 0.7697 +vn -0.1616 0.1847 0.9694 +vn 0.1616 0.1847 0.9694 +vn 0.8681 0.0893 -0.4883 +vn -0.9340 0.2255 0.2773 +vn 0.9276 0.0762 0.3657 +vn -0.9276 0.0762 0.3657 +vn 0.9750 0.2169 0.0490 +vn -0.9750 0.2169 0.0490 +vn 0.9817 -0.0304 -0.1882 +vn -0.9956 0.0893 -0.0288 +vn 0.7466 -0.6646 0.0285 +vn -0.6374 -0.7651 0.0915 +vn 0.3723 -0.9243 0.0847 +vn -0.3720 -0.9244 0.0845 +vn 0.3986 -0.8754 0.2734 +vn -0.3986 -0.8754 0.2734 +vn 0.6328 -0.7642 0.1247 +vn -0.6328 -0.7642 0.1247 +vn 0.7325 -0.6368 0.2407 +vn -0.7325 -0.6368 0.2407 +vn 0.2637 -0.4499 0.8533 +vn -0.2637 -0.4499 0.8533 +vn 0.5881 -0.3070 -0.7483 +vn -0.5236 -0.3290 -0.7859 +vn 0.4694 -0.2400 -0.8498 +vn -0.5396 -0.3343 -0.7727 +vn 0.4463 -0.8452 -0.2941 +vn -0.2144 -0.8341 -0.5082 +vn 0.6973 -0.6610 -0.2771 +vn -0.7365 -0.6154 -0.2808 +vn 0.4972 -0.4408 -0.7473 +vn -0.4972 -0.4408 -0.7473 +vn 0.3691 0.2855 0.8844 +vn -0.3244 0.4867 0.8111 +vn 0.4467 0.0975 0.8894 +vn -0.4467 0.0975 0.8894 +vn 0.3188 0.1993 0.9266 +vn -0.1817 -0.0079 0.9833 +vn 0.2076 -0.0836 0.9746 +vn -0.2925 -0.0758 0.9533 +vn 0.3398 0.0824 0.9369 +vn -0.5847 -0.2198 0.7809 +vn 0.5957 -0.3850 0.7049 +vn -0.5957 -0.3850 0.7049 +vn 0.4843 0.5580 0.6738 +vn -0.4843 0.5580 0.6738 +vn -0.2675 0.8318 0.4864 +vn 0.2675 0.8318 0.4864 +vn -0.8576 0.2223 0.4637 +vn 0.7885 0.2366 0.5677 +vn -0.5257 -0.3579 0.7717 +vn 0.5242 -0.3548 0.7742 +vn 0.4663 -0.5991 0.6509 +vn -0.4390 -0.5252 0.7290 +vn 0.7104 -0.4567 0.5356 +vn -0.7104 -0.4567 0.5356 +vn 0.7507 -0.6131 -0.2461 +vn -0.6302 -0.7658 0.1282 +vn -0.1788 0.2923 0.9395 +vn 0.2175 0.2733 0.9370 +vn 0.9042 -0.3578 -0.2332 +vn -0.9042 -0.3578 -0.2332 +vn 0.0400 0.3399 0.9396 +vn -0.0400 0.3399 0.9396 +vn 0.2734 0.9064 0.3221 +vn -0.2734 0.9064 0.3221 +vn 0.4480 -0.4480 0.7737 +vn -0.7177 0.1689 0.6755 +vn 0.5534 -0.5534 0.6225 +vn -0.9008 -0.4075 0.1501 +vn 0.5724 -0.3122 0.7582 +vn -0.5815 -0.5217 0.6243 +vn 0.5597 -0.5533 0.6169 +vn -0.6138 -0.2571 0.7465 +vn 0.8271 0.5323 -0.1802 +vn -0.8271 0.5323 -0.1802 +vn 0.9227 -0.3765 -0.0825 +vn -0.8717 -0.4446 -0.2063 +vn 0.9972 -0.0181 -0.0725 +vn -0.9972 -0.0181 -0.0725 +vn 0.6895 -0.6644 0.2883 +vn -0.6895 -0.6644 0.2883 +vn 0.7815 -0.6176 0.0882 +vn -0.7930 -0.5947 0.1322 +vn 0.7022 -0.7022 0.1170 +vn -0.7022 -0.7022 0.1170 +vn 0.1240 0.9921 0.0207 +vn -0.2408 0.9631 -0.1204 +vn 0.9435 0.3145 0.1048 +vn -0.9251 0.3469 0.1542 +vn 0.6213 -0.7767 0.1036 +vn -0.6213 -0.7767 0.1036 +vn -0.0000 1.0000 -0.0000 +vn 0.6197 -0.6899 0.3742 +vn -0.6197 -0.6899 0.3742 +vn 0.2752 -0.8808 0.3853 +vn -0.2752 -0.8808 0.3853 +vn -0.7929 -0.5252 -0.3089 +vn 0.7929 -0.5252 -0.3089 +vn -0.8096 0.2429 -0.5343 +vn 0.8538 0.2328 -0.4657 +vn -0.5621 0.8231 -0.0803 +vn 0.5433 0.6985 -0.4657 +vn -0.0071 0.9899 0.1414 +vn 0.1096 0.9939 -0.0157 +vn 0.1046 0.0392 0.9937 +vn -0.1738 0.0097 0.9847 +vn 0.2461 0.0852 0.9655 +vn -0.4134 0.0413 0.9096 +vn 0.3009 0.0926 0.9491 +vn -0.3009 0.0926 0.9491 +vn 0.2104 0.0124 0.9775 +vn -0.1220 0.0458 0.9915 +vn -0.0099 0.3867 0.9221 +vn 0.0099 0.3867 0.9221 +vn 0.3787 -0.0364 0.9248 +vn -0.4244 -0.0320 0.9049 +vn 0.2530 -0.1897 0.9487 +vn -0.2570 0.0723 0.9637 +vn -0.4870 0.6088 0.6262 +vn 0.2981 0.7454 0.5963 +vn 0.6693 0.1802 0.7208 +vn -0.6693 0.1802 0.7208 +vn 0.4388 -0.2008 0.8759 +vn -0.4723 -0.1986 0.8588 +vn 0.5786 -0.1334 0.8046 +vn -0.2975 -0.4062 0.8640 +vn 0.5002 0.2833 0.8182 +vn -0.5002 0.2833 0.8182 +vn 0.2980 0.5802 0.7580 +vn -0.2980 0.5802 0.7580 +vn 0.0929 -0.9912 -0.0944 +vn -0.0929 -0.9912 -0.0944 +vn 0.4688 -0.8715 0.1442 +vn -0.4688 -0.8715 0.1442 +vn 0.9309 -0.2541 0.2624 +vn -0.9264 -0.2460 0.2851 +vn 0.8465 0.5291 -0.0595 +vn -0.8267 0.5627 -0.0035 +vn -0.2511 0.9439 -0.2145 +vn 0.2146 0.9243 -0.3157 +vn -0.4841 0.8743 -0.0361 +vn 0.4196 0.8851 -0.2012 +vn -0.5256 -0.0030 -0.8507 +vn 0.5470 -0.0144 -0.8370 +vn -0.1466 0.0104 -0.9891 +vn 0.1466 0.0104 -0.9891 +vn 0.4046 0.0266 -0.9141 +vn -0.4046 0.0266 -0.9141 +vn -0.8073 0.5901 0.0041 +vn 0.7330 0.6786 0.0472 +vn 0.4200 -0.2291 -0.8781 +vn -0.4200 -0.2291 -0.8781 +vn -0.0687 -0.9943 -0.0818 +vn 0.0687 -0.9943 -0.0818 +vn 0.6713 -0.1971 0.7145 +vn -0.6713 -0.1971 0.7145 +vn 0.8326 -0.3017 0.4646 +vn -0.8326 -0.3017 0.4646 +vn 0.4258 -0.7967 0.4290 +vn -0.4258 -0.7967 0.4290 +vn 0.3265 -0.4954 0.8050 +vn -0.3265 -0.4954 0.8050 +vn -0.0649 -0.5714 0.8181 +vn 0.0649 -0.5714 0.8181 +vn -0.2738 -0.8315 0.4834 +vn 0.2738 -0.8315 0.4834 +vn -0.7606 -0.3400 0.5531 +vn 0.7824 -0.3294 0.5285 +vn -0.4658 -0.1863 0.8651 +vn 0.4658 -0.1863 0.8651 +vn -0.4983 0.1812 0.8478 +vn 0.4983 0.1812 0.8478 +vn -0.7683 0.3293 0.5488 +vn 0.7656 0.3223 0.5568 +vn -0.2487 0.8249 0.5076 +vn 0.2560 0.8073 0.5317 +vn -0.1017 0.5518 0.8277 +vn 0.0821 0.6023 0.7940 +vn 0.3861 0.5446 0.7445 +vn -0.3329 0.5231 0.7846 +vn 0.4059 0.7641 0.5014 +vn -0.4246 0.7711 0.4745 +vn 0.8299 0.2940 0.4742 +vn -0.8251 0.2968 0.4808 +vn 0.6617 0.2026 0.7219 +vn -0.6888 0.1868 0.7005 +vn 0.7816 0.3058 -0.5437 +vn -0.8400 0.3436 -0.4200 +vn 0.2037 0.8146 -0.5431 +vn -0.2074 0.8296 -0.5185 +vn -0.4381 0.7988 -0.4123 +vn 0.4056 0.7605 -0.5070 +vn -0.7861 0.3276 -0.5241 +vn 0.8642 0.3143 -0.3928 +vn -0.8519 -0.3408 -0.3976 +vn 0.8519 -0.3408 -0.3976 +vn -0.4056 -0.7605 -0.5070 +vn 0.4056 -0.7605 -0.5070 +vn 0.2074 -0.8296 -0.5185 +vn -0.2074 -0.8296 -0.5185 +vn 0.8297 -0.3734 -0.4149 +vn -0.8297 -0.3734 -0.4149 +vn 0.1054 -0.8433 0.5270 +vn -0.1367 -0.8748 0.4648 +vn 0.1916 -0.8620 0.4693 +vn -0.2303 -0.8656 0.4447 +vn 0.5959 -0.4256 0.6810 +vn -0.5959 -0.4256 0.6810 +vn 0.7563 -0.0299 0.6535 +vn -0.7563 -0.0299 0.6535 +vn 0.8069 0.0689 0.5866 +vn -0.8069 0.0689 0.5866 +vn 0.2334 -0.7779 0.5834 +vn -0.2334 -0.7779 0.5834 +vn 0.4177 -0.5751 0.7034 +vn -0.3557 -0.7290 0.5848 +vn 0.6872 -0.4191 0.5934 +vn -0.6872 -0.4191 0.5934 +vn 0.5537 -0.2978 0.7777 +vn -0.7028 -0.3915 0.5939 +vn 0.8227 0.3606 0.4395 +vn -0.3127 0.3425 0.8860 +vn 0.5041 0.6448 0.5745 +vn -0.5091 0.6482 0.5663 +vn 0.6155 0.4924 0.6155 +vn -0.6155 0.4924 0.6155 +vn -0.0371 0.6685 0.7428 +vn 0.0486 0.6560 0.7532 +vn -0.7386 0.3768 0.5590 +vn 0.7104 0.2715 0.6494 +vn -0.5774 0.5774 0.5774 +vn 0.6013 0.5262 0.6013 +vn 0.5364 -0.3230 0.7797 +vn -0.5070 -0.6281 0.5903 +vn 0.2181 -0.4685 0.8561 +vn -0.2181 -0.4685 0.8561 +vn -0.1073 -0.5010 0.8588 +vn 0.0348 -0.5792 0.8144 +vn -0.0770 -0.5759 0.8139 +vn 0.0899 -0.7843 0.6138 +vn 0.0279 -0.8645 0.5019 +vn -0.0547 -0.1695 0.9840 +vn 0.1687 -0.3128 0.9347 +vn -0.4260 -0.0609 0.9027 +vn 0.4350 -0.1812 0.8820 +vn -0.3352 -0.1828 0.9243 +vn 0.3223 -0.2762 0.9054 +vn -0.3579 -0.3068 0.8819 +vn 0.4815 -0.2408 0.8427 +vn -0.3069 0.2113 0.9280 +vn -0.0317 -0.1899 0.9813 +vn 0.0317 -0.1899 0.9813 +vn 0.1854 -0.4956 0.8485 +vn -0.6819 -0.2915 0.6709 +vn 0.2623 -0.3498 0.8994 +vn -0.2623 -0.3498 0.8994 +vn 0.0585 -0.0845 0.9947 +vn 0.0066 -0.2316 0.9728 +vn -0.0136 -0.6507 0.7592 +vn 0.0136 -0.6507 0.7592 +vn 0.2404 -0.5476 0.8014 +vn -0.2404 -0.5476 0.8014 +vn 0.3143 -0.3928 0.8642 +vn -0.3128 -0.1662 0.9352 +vn 0.2821 -0.0164 0.9592 +vn -0.2821 -0.0164 0.9592 +vn 0.3273 -0.1432 0.9340 +vn -0.3273 -0.1432 0.9340 +vn 0.0232 0.0511 0.9984 +vn 0.0043 -0.0651 0.9979 +vn 0.7826 -0.6087 -0.1304 +vn -0.7826 -0.6087 -0.1304 +vn 0.9448 0.1919 -0.2657 +vn -0.9448 0.1919 -0.2657 +vn 0.1018 0.9165 -0.3870 +vn -0.0693 0.9004 -0.4294 +vn -0.6905 0.5492 0.4708 +vn 0.4319 -0.8639 0.2592 +vn -0.4071 -0.8956 0.1791 +vn -0.6667 0.6667 0.3333 +vn 0.6667 0.6667 0.3333 +vn 0.1348 0.8086 0.5727 +vn -0.1348 0.8086 0.5727 +vn 0.7639 0.2971 0.5729 +vn -0.7532 0.2870 0.5918 +vn 0.4116 -0.8575 0.3087 +vn -0.4116 -0.8575 0.3087 +vn 0.0375 0.2247 0.9737 +vn -0.0502 0.2343 0.9709 +vn 0.1304 -0.2609 0.9565 +vn -0.1304 -0.2609 0.9565 +vn -0.0631 -0.8206 0.5681 +vn 0.0631 -0.8206 0.5681 +vn 0.7325 0.2817 0.6198 +vn -0.7325 0.2817 0.6198 +vn 0.3319 0.0738 0.9404 +vn -0.5460 -0.4310 0.7184 +vn 0.2815 0.0662 0.9573 +vn -0.3231 0.0311 0.9459 +vn 0.8753 0.2059 0.4376 +vn -0.7357 0.3910 0.5531 +vn 0.8973 0.1994 0.3938 +vn -0.8480 0.3180 0.4240 +vn 0.9586 0.0664 0.2767 +vn -0.9586 0.0664 0.2767 +vn 0.2524 -0.8655 0.4327 +vn -0.1783 -0.4161 0.8917 +vn -0.1751 -0.2043 0.9631 +vn 0.1751 -0.2043 0.9631 +vn -0.1219 -0.1829 0.9755 +vn 0.1219 -0.1829 0.9755 +vn -0.1562 0.3123 0.9370 +vn 0.1562 0.3123 0.9370 +vn -0.7238 0.6857 0.0762 +vn 0.7238 0.6857 0.0762 +vn 0.0478 -0.2870 0.9567 +vn -0.0478 -0.2870 0.9567 +vn -0.5488 -0.3293 0.7683 +vn 0.5488 -0.3293 0.7683 +vn -0.4945 -0.1130 0.8618 +vn 0.4945 -0.1130 0.8618 +vn -0.2595 0.1038 0.9601 +vn 0.1717 -0.0090 0.9851 +vn -0.6684 -0.4595 0.5849 +vn 0.4332 -0.4874 0.7581 +vn -0.1156 -0.6359 0.7631 +vn 0.1156 -0.6359 0.7631 +vn 0.4242 -0.6211 0.6590 +vn -0.4242 -0.6211 0.6590 +vn 0.4767 -0.3557 0.8039 +vn -0.4767 -0.3557 0.8039 +vn 0.5871 -0.0839 0.8052 +vn -0.5871 -0.0839 0.8052 +vn 0.5774 0.1155 0.8083 +vn -0.5657 0.1197 0.8159 +vn 0.5214 0.6574 0.5441 +vn -0.4082 0.4082 0.8165 +vn 0.3358 0.3478 0.8754 +vn -0.3358 0.3478 0.8754 +vn 0.1452 0.3774 0.9146 +vn -0.1452 0.3774 0.9146 +vn 0.0301 0.2306 0.9726 +vn -0.0301 0.2306 0.9726 +vn 0.3553 -0.5739 0.7379 +vn -0.2804 -0.2181 0.9348 +vn 0.2627 -0.2252 0.9382 +vn -0.2627 -0.2252 0.9382 +vn -0.0631 -0.3156 0.9468 +vn 0.3766 -0.8339 0.4035 +vn -0.2016 -0.9071 0.3696 +vn -0.0823 -0.7822 0.6175 +vn -0.3356 -0.2397 0.9110 +vn 0.3356 -0.2397 0.9110 +vn -0.4568 0.0508 0.8881 +vn 0.2692 -0.0577 0.9614 +vn -0.0247 0.4072 0.9130 +vn 0.0247 0.4072 0.9130 +vn -0.0487 0.6815 0.7302 +vn 0.0213 0.5546 0.8319 +vn 0.3378 0.5221 0.7831 +vn -0.3778 0.6342 0.6746 +vn 0.7895 -0.3158 0.5263 +vn -0.7895 -0.3158 0.5263 +vn 0.8070 -0.0807 0.5851 +vn -0.8070 -0.0807 0.5851 +vn 0.7868 0.1210 0.6052 +vn -0.7868 0.1210 0.6052 +vn -0.6357 0.6811 -0.3633 +vn 0.6357 0.6811 -0.3633 +vn -0.8507 0.3650 -0.3783 +vn 0.8507 0.3650 -0.3783 +vn -0.2197 0.8626 -0.4557 +vn 0.2664 0.8710 -0.4127 +vn 0.5914 0.7489 -0.2991 +vn -0.5932 0.7445 -0.3063 +vn 0.3653 0.8833 -0.2938 +vn -0.3714 0.8685 -0.3284 +vn 0.2760 0.9159 -0.2915 +vn -0.2760 0.9159 -0.2915 +vn 0.7964 0.1323 -0.5901 +vn -0.8873 0.1343 -0.4412 +vn 0.5442 -0.7524 -0.3712 +vn -0.5442 -0.7524 -0.3712 +vn 0.4027 -0.7323 -0.5492 +vn -0.4027 -0.7323 -0.5492 +vn 0.1649 -0.6644 -0.7289 +vn -0.3617 -0.3858 -0.8487 +vn 0.3011 -0.0125 -0.9535 +vn -0.1952 -0.0976 -0.9759 +vn 0.2562 -0.3112 -0.9152 +vn 0.0107 -0.5633 -0.8262 +vn 0.0779 -0.9948 -0.0663 +vn -0.0779 -0.9948 -0.0663 +vn 0.1094 -0.9718 -0.2089 +vn -0.1094 -0.9718 -0.2089 +vn 0.8150 -0.5621 -0.1405 +vn -0.8150 -0.5621 -0.1405 +vn 0.9358 0.1396 -0.3236 +vn -0.9358 0.1396 -0.3236 +vn 0.1132 -0.0274 -0.9932 +vn -0.1132 -0.0274 -0.9932 +vn -0.1497 -0.3635 -0.9195 +vn -0.1211 -0.0530 -0.9912 +vn 0.3706 -0.6780 -0.6349 +vn -0.9094 0.1371 -0.3927 +vn 0.9193 0.1393 -0.3682 +vn -0.9193 0.1393 -0.3682 +vn 0.9457 0.2673 -0.1850 +vn -0.9173 0.3440 -0.2007 +vn 0.9337 0.2813 -0.2215 +vn -0.9004 0.3642 -0.2380 +vn 0.9501 0.2455 -0.1922 +vn -0.8945 0.4337 0.1084 +vn 0.1835 -0.7864 -0.5898 +vn -0.1596 -0.9577 -0.2394 +vn 0.3727 -0.4759 -0.7966 +vn -0.3693 -0.4712 -0.8010 +vn 0.3263 -0.8342 -0.4446 +vn -0.2986 -0.8236 -0.4821 +vn 0.2620 -0.9574 -0.1217 +vn -0.2620 -0.9574 -0.1217 +vn 0.2996 -0.9443 -0.1362 +vn -0.2996 -0.9443 -0.1362 +vn 0.8642 -0.4737 0.1696 +vn -0.8305 0.3333 -0.4463 +vn 0.6869 -0.6358 0.3521 +vn -0.6869 -0.6358 0.3521 +vn 0.4189 -0.2265 -0.8793 +vn -0.2950 -0.0454 -0.9544 +vn 0.1119 0.9626 0.2468 +vn -0.1272 0.9658 0.2260 +vn 0.1208 0.9734 -0.1947 +vn -0.1208 0.9734 -0.1947 +vn 0.3140 0.5711 -0.7585 +vn -0.3140 0.5711 -0.7585 +vn 0.3231 0.9288 -0.1817 +vn -0.3231 0.9288 -0.1817 +vn 0.0452 0.7955 0.6043 +vn -0.0452 0.7955 0.6043 +vn 0.6144 0.7696 0.1738 +vn -0.6144 0.7696 0.1738 +vn 0.6935 0.6857 -0.2212 +vn -0.6935 0.6857 -0.2212 +vn 0.6304 0.2517 -0.7343 +vn -0.7104 0.1364 -0.6904 +vn 0.3179 0.5704 -0.7574 +vn -0.3179 0.5704 -0.7574 +vn 0.6289 0.7624 -0.1525 +vn -0.6289 0.7624 -0.1525 +vn 0.7088 0.6833 0.1752 +vn -0.7088 0.6833 0.1752 +vn 0.6885 0.3830 0.6158 +vn -0.6885 0.3830 0.6158 +vn 0.3238 0.9434 -0.0720 +vn -0.3669 0.8840 -0.2898 +vn 0.1548 0.5080 0.8473 +vn -0.2854 0.6237 0.7277 +vn -0.1819 0.1145 -0.9766 +vn 0.1819 0.1145 -0.9766 +vn -0.2638 0.9462 -0.1871 +vn 0.2638 0.9462 -0.1871 +vn 0.9340 0.2255 0.2773 +vn -0.8681 0.0893 -0.4883 +vn 0.9758 0.1241 0.1800 +vn -0.9758 0.1241 0.1800 +vn 0.9613 0.1472 -0.2330 +vn -0.9613 0.1472 -0.2330 +vn 0.9956 0.0893 -0.0288 +vn -0.9817 -0.0304 -0.1882 +vn 0.6374 -0.7651 0.0915 +vn -0.7466 -0.6646 0.0285 +vn 0.3720 -0.9244 0.0845 +vn -0.3723 -0.9243 0.0847 +vn 0.5281 -0.8354 0.1522 +vn -0.5281 -0.8354 0.1522 +vn 0.3070 -0.5237 0.7946 +vn -0.3070 -0.5237 0.7946 +vn 0.5236 -0.3290 -0.7859 +vn -0.5881 -0.3070 -0.7483 +vn 0.5396 -0.3343 -0.7727 +vn -0.4694 -0.2400 -0.8498 +vn 0.2144 -0.8341 -0.5082 +vn -0.4463 -0.8452 -0.2941 +vn 0.7365 -0.6154 -0.2808 +vn -0.6973 -0.6610 -0.2771 +vn 0.3244 0.4867 0.8111 +vn -0.3691 0.2855 0.8844 +vn 0.4649 0.2593 0.8465 +vn -0.4649 0.2593 0.8465 +vn 0.1817 -0.0079 0.9833 +vn -0.3188 0.1993 0.9266 +vn 0.2925 -0.0758 0.9533 +vn -0.2076 -0.0836 0.9746 +vn 0.5847 -0.2198 0.7809 +vn -0.3398 0.0824 0.9369 +vn 0.6509 -0.1939 0.7340 +vn -0.6509 -0.1939 0.7340 +vn 0.4075 0.7506 0.5201 +vn -0.4075 0.7506 0.5201 +vn -0.2655 0.8296 0.4911 +vn 0.2655 0.8296 0.4911 +vn -0.7885 0.2366 0.5677 +vn 0.8576 0.2223 0.4637 +vn -0.5242 -0.3548 0.7742 +vn 0.5257 -0.3579 0.7717 +vn 0.4390 -0.5252 0.7290 +vn -0.4663 -0.5991 0.6509 +vn 0.6888 -0.4428 0.5740 +vn -0.6888 -0.4428 0.5740 +vn 0.6302 -0.7658 0.1282 +vn -0.7507 -0.6131 -0.2461 +vn -0.2175 0.2733 0.9370 +vn 0.1788 0.2923 0.9395 +vn 0.9046 -0.3869 -0.1792 +vn -0.9046 -0.3869 -0.1792 +vn 0.1782 -0.0891 0.9800 +vn -0.1782 -0.0891 0.9800 +vn -0.2335 0.8972 0.3749 +vn 0.2335 0.8972 0.3749 +vn 0.7177 0.1689 0.6755 +vn -0.4480 -0.4480 0.7737 +vn 0.5313 0.5844 0.6134 +vn -0.5313 0.5844 0.6134 +vn 0.9008 -0.4075 0.1501 +vn -0.5534 -0.5534 0.6225 +vn 0.5815 -0.5217 0.6243 +vn -0.5724 -0.3122 0.7582 +vn 0.6138 -0.2571 0.7465 +vn -0.5597 -0.5533 0.6169 +vn 0.8779 -0.4788 0.0076 +vn -0.8779 -0.4788 0.0076 +vn 0.8717 -0.4446 -0.2063 +vn -0.9227 -0.3765 -0.0825 +vn 0.7661 -0.6363 0.0909 +vn -0.7661 -0.6363 0.0909 +vn 0.7930 -0.5947 0.1322 +vn -0.7815 -0.6176 0.0882 +vn 0.2408 0.9631 -0.1204 +vn -0.1240 0.9921 0.0207 +vn 0.9251 0.3469 0.1542 +vn -0.9435 0.3145 0.1048 +vn 0.7071 -0.7071 -0.0000 +vn -0.7071 -0.7071 -0.0000 +vn -0.0157 0.9898 0.1414 +vn 0.0157 0.9898 0.1414 +vn 0.6266 -0.7211 0.2956 +vn -0.6266 -0.7211 0.2956 +vn 0.2714 -0.9022 0.3353 +vn -0.2714 -0.9022 0.3353 +vn -0.8651 -0.4853 -0.1266 +vn 0.8651 -0.4853 -0.1266 +vn -0.8538 0.2328 -0.4657 +vn 0.8096 0.2429 -0.5343 +vn -0.5433 0.6985 -0.4657 +vn 0.5621 0.8231 -0.0803 +vn -0.1096 0.9939 -0.0157 +vn 0.0071 0.9899 0.1414 +vn 0.1738 0.0097 0.9847 +vn -0.1046 0.0392 0.9937 +vn 0.4134 0.0413 0.9096 +vn -0.2461 0.0852 0.9655 +vn 0.3228 -0.0461 0.9453 +vn -0.3228 -0.0461 0.9453 +vn 0.1220 0.0458 0.9915 +vn -0.2104 0.0124 0.9775 +vn 0.5679 0.1916 0.8005 +vn -0.5679 0.1916 0.8005 +vn 0.4244 -0.0320 0.9049 +vn -0.3787 -0.0364 0.9248 +vn 0.2570 0.0723 0.9637 +vn -0.2530 -0.1897 0.9487 +vn 0.1351 -0.0225 0.9906 +vn -0.1351 -0.0225 0.9906 +vn -0.2981 0.7454 0.5963 +vn 0.4870 0.6088 0.6262 +vn 0.5571 -0.1486 0.8171 +vn -0.5571 -0.1486 0.8171 +vn 0.4723 -0.1986 0.8588 +vn -0.4388 -0.2008 0.8759 +vn 0.2975 -0.4062 0.8640 +vn -0.5786 -0.1334 0.8046 +vn 0.5771 0.2164 0.7875 +vn -0.5771 0.2164 0.7875 +vn 0.0931 -0.9932 -0.0692 +vn -0.0931 -0.9932 -0.0692 +vn 0.5161 -0.8527 -0.0812 +vn -0.5161 -0.8527 -0.0812 +vn 0.9264 -0.2460 0.2851 +vn -0.9309 -0.2541 0.2624 +vn 0.8267 0.5627 -0.0035 +vn -0.8465 0.5291 -0.0595 +vn -0.2146 0.9243 -0.3157 +vn 0.2511 0.9439 -0.2145 +vn -0.4196 0.8851 -0.2012 +vn 0.4841 0.8743 -0.0361 +vn -0.5470 -0.0144 -0.8370 +vn 0.5256 -0.0030 -0.8507 +vn -0.2556 -0.0749 -0.9639 +vn 0.2556 -0.0749 -0.9639 +vn -0.7330 0.6786 0.0472 +vn 0.8073 0.5901 0.0041 +vn 0.6844 -0.1711 -0.7088 +vn -0.6844 -0.1711 -0.7088 +vn -0.3604 -0.8283 -0.4290 +vn 0.3604 -0.8283 -0.4290 +vt 0.843250 0.588863 +vt 0.794218 0.611927 +vt 0.815334 0.560948 +vt 0.866314 0.937441 +vt 0.889378 0.888409 +vt 0.917293 0.916324 +vt 0.746541 0.611927 +vt 0.781622 0.527235 +vt 0.866314 0.985118 +vt 0.951006 0.950037 +vt 0.781622 0.696619 +vt 0.781622 0.950037 +vt 0.833697 0.611927 +vt 0.815334 0.662907 +vt 0.815334 0.916325 +vt 0.866314 0.897962 +vt 0.843250 0.634991 +vt 0.866314 0.684023 +vt 0.794218 0.865345 +vt 0.843250 0.888409 +vt 0.866314 0.731700 +vt 0.746541 0.865345 +vt 0.917293 0.662907 +vt 0.815334 0.814366 +vt 0.781622 0.780653 +vt 0.866314 0.644544 +vt 0.833697 0.865345 +vt 0.889378 0.634991 +vt 0.938410 0.611927 +vt 0.866314 0.793249 +vt 0.843250 0.842281 +vt 0.951006 0.696619 +vt 0.866314 0.745572 +vt 0.917294 0.560947 +vt 0.986087 0.611927 +vt 0.917294 0.814365 +vt 0.951006 0.780653 +vt 0.889378 0.588863 +vt 0.898931 0.611927 +vt 0.889378 0.842281 +vt 0.866314 0.579310 +vt 0.898931 0.865345 +vt 0.938410 0.865345 +vt 0.866314 0.539831 +vt 0.951006 0.527235 +vt 0.986087 0.865345 +vt 0.866314 0.492154 +vt 0.847600 0.593213 +vt 0.885028 0.884059 +vt 0.892780 0.865345 +vt 0.866314 0.585461 +vt 0.885028 0.846631 +vt 0.885028 0.593213 +vt 0.866314 0.832728 +vt 0.866314 0.838879 +vt 0.892780 0.611927 +vt 0.847600 0.846631 +vt 0.866314 0.638393 +vt 0.885028 0.630641 +vt 0.839848 0.865345 +vt 0.847600 0.630641 +vt 0.847600 0.884059 +vt 0.839848 0.611927 +vt 0.866314 0.891811 +vt 0.866314 0.611927 +vt 0.866314 0.865345 +vt 0.517028 0.068490 +vt 0.500000 0.054411 +vt 0.520711 0.060503 +vt 0.482972 0.068490 +vt 0.500000 0.064527 +vt 0.522612 0.070678 +vt 0.530457 0.065062 +vt 0.477388 0.070678 +vt 0.479289 0.060503 +vt 0.532878 0.067822 +vt 0.467122 0.067822 +vt 0.469543 0.065062 +vt 0.544695 0.083023 +vt 0.526301 0.079422 +vt 0.473699 0.079422 +vt 0.455305 0.083023 +vt 0.565647 0.115495 +vt 0.529228 0.091098 +vt 0.470772 0.091098 +vt 0.434353 0.115495 +vt 0.586916 0.172042 +vt 0.600470 0.238288 +vt 0.535885 0.215568 +vt 0.399530 0.238288 +vt 0.413084 0.172042 +vt 0.464115 0.215568 +vt 0.650908 0.240294 +vt 0.626605 0.208159 +vt 0.349092 0.240294 +vt 0.363038 0.261221 +vt 0.655896 0.284413 +vt 0.636962 0.261221 +vt 0.344104 0.284413 +vt 0.684517 0.317795 +vt 0.689501 0.268805 +vt 0.315483 0.317795 +vt 0.340493 0.313152 +vt 0.671357 0.334694 +vt 0.659507 0.313152 +vt 0.328643 0.334694 +vt 0.350893 0.322437 +vt 0.636775 0.370732 +vt 0.649107 0.322437 +vt 0.363225 0.370732 +vt 0.386364 0.353108 +vt 0.594178 0.371277 +vt 0.613636 0.353108 +vt 0.405822 0.371277 +vt 0.581044 0.398468 +vt 0.602261 0.395588 +vt 0.418956 0.398468 +vt 0.422649 0.373341 +vt 0.532016 0.387365 +vt 0.577351 0.373341 +vt 0.467984 0.387365 +vt 0.460183 0.354339 +vt 0.500000 0.382860 +vt 0.539817 0.354339 +vt 0.500000 0.340417 +vt 0.579057 0.335646 +vt 0.559135 0.334326 +vt 0.420943 0.335646 +vt 0.592090 0.332885 +vt 0.606163 0.325516 +vt 0.407910 0.332885 +vt 0.628251 0.311636 +vt 0.393837 0.325516 +vt 0.635551 0.300507 +vt 0.371749 0.311636 +vt 0.631484 0.283889 +vt 0.364449 0.300507 +vt 0.611331 0.264411 +vt 0.368516 0.283889 +vt 0.592372 0.254897 +vt 0.388669 0.264411 +vt 0.559669 0.267717 +vt 0.407628 0.254897 +vt 0.500000 0.252445 +vt 0.440331 0.267717 +vt 0.544001 0.314523 +vt 0.455999 0.314523 +vt 0.500000 0.295691 +vt 0.543637 0.293371 +vt 0.456363 0.293371 +vt 0.550878 0.277832 +vt 0.449122 0.277832 +vt 0.506819 0.075382 +vt 0.493181 0.075382 +vt 0.511782 0.080633 +vt 0.488218 0.080633 +vt 0.512172 0.093457 +vt 0.537536 0.127779 +vt 0.513874 0.097191 +vt 0.486126 0.097191 +vt 0.462464 0.127779 +vt 0.487828 0.093457 +vt 0.500000 0.157864 +vt 0.514257 0.133422 +vt 0.520226 0.164615 +vt 0.485743 0.133422 +vt 0.500000 0.134352 +vt 0.500000 0.100063 +vt 0.500000 0.091346 +vt 0.530258 0.180239 +vt 0.517666 0.172353 +vt 0.482334 0.172353 +vt 0.469742 0.180239 +vt 0.479774 0.164615 +vt 0.523673 0.198817 +vt 0.521901 0.181560 +vt 0.478099 0.181560 +vt 0.476327 0.198817 +vt 0.508211 0.197295 +vt 0.500000 0.203867 +vt 0.491789 0.197295 +vt 0.481043 0.194728 +vt 0.500000 0.192167 +vt 0.500000 0.197278 +vt 0.500000 0.165170 +vt 0.500000 0.171718 +vt 0.486462 0.176949 +vt 0.508818 0.192407 +vt 0.491182 0.192407 +vt 0.515232 0.190709 +vt 0.518957 0.194728 +vt 0.484768 0.190709 +vt 0.483092 0.181873 +vt 0.513538 0.176949 +vt 0.516908 0.181873 +vt 0.500000 0.186182 +vt 0.544209 0.172814 +vt 0.455791 0.172814 +vt 0.458673 0.154899 +vt 0.541327 0.154899 +vt 0.578661 0.139176 +vt 0.421339 0.139176 +vt 0.583245 0.154155 +vt 0.416755 0.154155 +vt 0.509911 0.090724 +vt 0.490089 0.090724 +vt 0.500000 0.089977 +vt 0.509713 0.082236 +vt 0.490287 0.082236 +vt 0.505196 0.077083 +vt 0.494804 0.077083 +vt 0.500000 0.073497 +vt 0.500000 0.075473 +vt 0.500000 0.080320 +vt 0.496555 0.080840 +vt 0.506660 0.083289 +vt 0.503445 0.080840 +vt 0.493340 0.083289 +vt 0.506822 0.086791 +vt 0.493178 0.086791 +vt 0.500000 0.085637 +vt 0.562361 0.284338 +vt 0.559190 0.294882 +vt 0.437639 0.284338 +vt 0.440810 0.294882 +vt 0.563180 0.307151 +vt 0.436820 0.307151 +vt 0.570458 0.318697 +vt 0.429542 0.318697 +vt 0.430757 0.278245 +vt 0.589914 0.271772 +vt 0.569243 0.278245 +vt 0.410086 0.271772 +vt 0.602190 0.277180 +vt 0.397810 0.277180 +vt 0.617110 0.287175 +vt 0.382890 0.287175 +vt 0.618074 0.299197 +vt 0.381926 0.299197 +vt 0.384129 0.307438 +vt 0.615871 0.307438 +vt 0.401576 0.313725 +vt 0.590828 0.319797 +vt 0.598424 0.313725 +vt 0.409172 0.319797 +vt 0.582130 0.320991 +vt 0.417870 0.320991 +vt 0.583998 0.312892 +vt 0.416002 0.312892 +vt 0.421385 0.309394 +vt 0.589656 0.312336 +vt 0.410344 0.312336 +vt 0.596347 0.309249 +vt 0.403653 0.309249 +vt 0.606014 0.302517 +vt 0.393986 0.302517 +vt 0.607735 0.297520 +vt 0.392265 0.297520 +vt 0.606985 0.291216 +vt 0.393015 0.291216 +vt 0.598275 0.283083 +vt 0.401725 0.283083 +vt 0.589866 0.280167 +vt 0.410134 0.280167 +vt 0.576352 0.284624 +vt 0.423648 0.284624 +vt 0.572831 0.289915 +vt 0.427169 0.289915 +vt 0.573307 0.303342 +vt 0.578615 0.309394 +vt 0.426693 0.303342 +vt 0.572447 0.295716 +vt 0.427553 0.295716 +vt 0.529647 0.428636 +vt 0.500000 0.428636 +vt 0.470353 0.428636 +vt 0.584616 0.428636 +vt 0.415384 0.428636 +vt 0.397739 0.395588 +vt 0.377699 0.417889 +vt 0.622301 0.417889 +vt 0.333786 0.388954 +vt 0.666214 0.388954 +vt 0.298519 0.344467 +vt 0.712163 0.315527 +vt 0.701481 0.344467 +vt 0.287837 0.315527 +vt 0.310499 0.268805 +vt 0.295695 0.260225 +vt 0.672947 0.224880 +vt 0.704305 0.260225 +vt 0.327053 0.224880 +vt 0.640497 0.198841 +vt 0.359503 0.198841 +vt 0.625128 0.029461 +vt 0.598617 0.056841 +vt 0.603553 0.023452 +vt 0.374872 0.029461 +vt 0.401383 0.056841 +vt 0.364247 0.082198 +vt 0.556354 0.040906 +vt 0.546781 0.009442 +vt 0.396447 0.023452 +vt 0.443646 0.040906 +vt 0.527159 0.049514 +vt 0.500000 0.033223 +vt 0.453219 0.009442 +vt 0.472841 0.049514 +vt 0.537222 0.060794 +vt 0.462778 0.060794 +vt 0.558499 0.065137 +vt 0.441501 0.065137 +vt 0.588127 0.085177 +vt 0.411873 0.085177 +vt 0.635753 0.082198 +vt 0.607239 0.113940 +vt 0.392761 0.113940 +vt 0.612663 0.133675 +vt 0.387337 0.133675 +vt 0.394533 0.151503 +vt 0.600708 0.162985 +vt 0.399292 0.162985 +vt 0.373395 0.208159 +vt 0.859647 0.117994 +vt 0.861342 0.027230 +vt 0.922374 0.064228 +vt 0.140353 0.117994 +vt 0.138658 0.027230 +vt 0.176713 0.101559 +vt 0.823287 0.101559 +vt 0.774604 0.010837 +vt 0.225396 0.010837 +vt 0.234137 0.087001 +vt 0.661952 0.087561 +vt 0.647010 0.028716 +vt 0.338048 0.087561 +vt 0.352990 0.028716 +vt 0.743592 0.198572 +vt 0.766410 0.233065 +vt 0.256408 0.198572 +vt 0.233590 0.233065 +vt 0.889478 0.177602 +vt 0.987633 0.154243 +vt 0.110522 0.177602 +vt 0.077626 0.064228 +vt 0.844317 0.347370 +vt 0.958963 0.357385 +vt 0.899807 0.420886 +vt 0.155683 0.347370 +vt 0.041037 0.357385 +vt 0.118831 0.309153 +vt 0.903302 0.261367 +vt 0.999860 0.253531 +vt 0.096698 0.261367 +vt 0.000140 0.253531 +vt 0.012367 0.154243 +vt 0.724763 0.340212 +vt 0.744725 0.304629 +vt 0.766113 0.319494 +vt 0.255275 0.304629 +vt 0.275237 0.340212 +vt 0.233887 0.319494 +vt 0.793427 0.280495 +vt 0.826663 0.297810 +vt 0.206573 0.280495 +vt 0.173337 0.297810 +vt 0.823620 0.254612 +vt 0.855331 0.267956 +vt 0.176380 0.254612 +vt 0.144669 0.267956 +vt 0.835860 0.225225 +vt 0.868309 0.233525 +vt 0.164140 0.225225 +vt 0.131691 0.233525 +vt 0.851288 0.181145 +vt 0.813499 0.190705 +vt 0.148712 0.181145 +vt 0.881169 0.309153 +vt 0.772263 0.374010 +vt 0.744519 0.390057 +vt 0.227737 0.374010 +vt 0.824765 0.470987 +vt 0.100193 0.420886 +vt 0.792141 0.464714 +vt 0.726855 0.432574 +vt 0.273145 0.432574 +vt 0.207859 0.464714 +vt 0.255481 0.390057 +vt 0.175235 0.470987 +vt 0.795638 0.489991 +vt 0.204362 0.489991 +vt 0.786137 0.227788 +vt 0.213863 0.227788 +vt 0.802950 0.203415 +vt 0.197050 0.203415 +vt 0.765863 0.087001 +vt 0.691484 0.146686 +vt 0.308516 0.146686 +vt 0.230666 0.128771 +vt 0.780113 0.169386 +vt 0.219887 0.169386 +vt 0.605467 0.151503 +vt 0.803789 0.171181 +vt 0.196211 0.171181 +vt 0.169083 0.139518 +vt 0.769334 0.128771 +vt 0.830917 0.139518 +vt 0.464516 0.959188 +vt 0.545439 0.884582 +vt 0.574628 0.959188 +vt 0.285710 0.959188 +vt 0.204787 0.884582 +vt 0.272900 0.891852 +vt 0.605134 0.846978 +vt 0.715894 0.897069 +vt 0.145092 0.846978 +vt 0.175598 0.959188 +vt 0.034332 0.897069 +vt 0.683874 0.757011 +vt 0.066352 0.757011 +vt 0.144866 0.784410 +vt 0.605360 0.784410 +vt 0.617867 0.719156 +vt 0.132359 0.719156 +vt 0.175391 0.744212 +vt 0.574835 0.744212 +vt 0.568728 0.682132 +vt 0.181498 0.682132 +vt 0.215230 0.712528 +vt 0.483006 0.686791 +vt 0.508539 0.641024 +vt 0.267220 0.686791 +vt 0.241687 0.641024 +vt 0.534996 0.712528 +vt 0.478880 0.719593 +vt 0.271346 0.719593 +vt 0.513415 0.736977 +vt 0.236811 0.736977 +vt 0.557599 0.789442 +vt 0.192627 0.789442 +vt 0.209109 0.760754 +vt 0.553841 0.821849 +vt 0.196385 0.821849 +vt 0.524671 0.842380 +vt 0.225555 0.842380 +vt 0.485193 0.845321 +vt 0.265033 0.845321 +vt 0.770208 0.191225 +vt 0.229792 0.191225 +vt 0.213850 0.181127 +vt 0.409610 0.674022 +vt 0.408153 0.587507 +vt 0.340616 0.674022 +vt 0.400301 0.910556 +vt 0.477326 0.891852 +vt 0.349925 0.910556 +vt 0.443630 0.713731 +vt 0.306596 0.713731 +vt 0.392812 0.710774 +vt 0.429725 0.728622 +vt 0.357414 0.710774 +vt 0.422979 0.754609 +vt 0.432640 0.746527 +vt 0.320501 0.728622 +vt 0.327247 0.754609 +vt 0.317586 0.746527 +vt 0.391578 0.815187 +vt 0.427719 0.796173 +vt 0.358648 0.815187 +vt 0.448277 0.830976 +vt 0.414155 0.878318 +vt 0.301949 0.830976 +vt 0.322507 0.796173 +vt 0.336071 0.878318 +vt 0.802580 0.199758 +vt 0.197420 0.199758 +vt 0.797710 0.195652 +vt 0.202290 0.195652 +vt 0.210391 0.184671 +vt 0.786150 0.181127 +vt 0.789609 0.184671 +vt 0.466042 0.804091 +vt 0.490498 0.816075 +vt 0.284184 0.804091 +vt 0.259728 0.816075 +vt 0.302184 0.783921 +vt 0.438745 0.764960 +vt 0.448042 0.783921 +vt 0.311481 0.764960 +vt 0.305010 0.756351 +vt 0.445216 0.756351 +vt 0.300407 0.743458 +vt 0.456307 0.732687 +vt 0.449819 0.743458 +vt 0.293919 0.732687 +vt 0.475471 0.740871 +vt 0.274755 0.740871 +vt 0.514211 0.817769 +vt 0.236015 0.817769 +vt 0.527961 0.808598 +vt 0.222265 0.808598 +vt 0.530079 0.790754 +vt 0.220147 0.790754 +vt 0.518620 0.772385 +vt 0.541117 0.760754 +vt 0.231606 0.772385 +vt 0.498668 0.755033 +vt 0.251558 0.755033 +vt 0.459660 0.770459 +vt 0.290566 0.770459 +vt 0.282197 0.756171 +vt 0.468029 0.756171 +vt 0.477354 0.785393 +vt 0.272872 0.785393 +vt 0.263059 0.769899 +vt 0.504617 0.782999 +vt 0.496545 0.797122 +vt 0.245609 0.782999 +vt 0.253681 0.797122 +vt 0.513713 0.804019 +vt 0.236513 0.804019 +vt 0.234089 0.792591 +vt 0.516137 0.792591 +vt 0.574269 0.607668 +vt 0.613510 0.655816 +vt 0.175957 0.607668 +vt 0.136716 0.655816 +vt 0.644031 0.693270 +vt 0.106195 0.693270 +vt 0.668163 0.712097 +vt 0.082063 0.712097 +vt 0.676584 0.686010 +vt 0.727131 0.698475 +vt 0.073642 0.686010 +vt 0.667013 0.640198 +vt 0.729804 0.624370 +vt 0.023095 0.698475 +vt 0.083213 0.640198 +vt 0.648152 0.594596 +vt 0.721292 0.572934 +vt 0.020422 0.624370 +vt 0.102074 0.594596 +vt 0.717709 0.538143 +vt 0.630034 0.557583 +vt 0.032517 0.538143 +vt 0.028934 0.572934 +vt 0.526877 0.539235 +vt 0.120192 0.557583 +vt 0.223349 0.539235 +vt 0.342073 0.587507 +vt 0.440865 0.334326 +vt 0.186501 0.190705 +vt 0.742181 0.461543 +vt 0.257819 0.461543 +vt 0.487167 0.769899 +s 0 +f 47/1/1 3/2/1 45/3/1 +f 4/4/2 48/5/2 46/6/2 +f 45/3/3 5/7/3 43/8/3 +f 6/9/4 46/6/4 44/10/4 +f 3/2/5 7/11/5 5/7/5 +f 8/12/6 4/4/6 6/9/6 +f 1/13/7 9/14/7 3/2/7 +f 10/15/8 2/16/8 4/4/8 +f 11/17/9 15/18/9 9/14/9 +f 16/19/10 12/20/10 10/15/10 +f 9/14/11 17/21/11 7/11/11 +f 18/22/12 10/15/12 8/12/12 +f 21/23/13 17/21/13 15/18/13 +f 22/24/14 18/22/14 20/25/14 +f 13/26/15 21/23/15 15/18/15 +f 22/24/16 14/27/16 16/19/16 +f 23/28/17 27/29/17 21/23/17 +f 28/30/18 24/31/18 22/24/18 +f 27/29/19 19/32/19 21/23/19 +f 28/30/20 20/25/20 30/33/20 +f 33/34/21 29/35/21 27/29/21 +f 34/36/22 30/33/22 32/37/22 +f 35/38/23 27/29/23 25/39/23 +f 36/40/24 28/30/24 34/36/24 +f 37/41/25 33/34/25 35/38/25 +f 38/42/26 34/36/26 40/43/26 +f 39/44/27 31/45/27 33/34/27 +f 40/43/28 32/37/28 42/46/28 +f 45/3/29 41/47/29 39/44/29 +f 46/6/30 42/46/30 44/10/30 +f 47/1/31 39/44/31 37/41/31 +f 48/5/32 40/43/32 46/6/32 +f 37/41/33 49/48/33 47/1/33 +f 38/42/34 50/49/34 52/50/34 +f 35/38/35 51/51/35 37/41/35 +f 36/40/36 52/50/36 54/52/36 +f 25/39/37 53/53/37 35/38/37 +f 26/54/38 54/52/38 56/55/38 +f 23/28/39 55/56/39 25/39/39 +f 24/31/40 56/55/40 58/57/40 +f 23/28/41 59/58/41 57/59/41 +f 60/60/42 24/31/42 58/57/42 +f 13/26/43 63/61/43 59/58/43 +f 64/62/44 14/27/44 60/60/44 +f 11/17/45 65/63/45 63/61/45 +f 66/64/46 12/20/46 64/62/46 +f 1/13/47 49/48/47 65/63/47 +f 50/49/48 2/16/48 66/64/48 +f 61/65/49 65/63/49 49/48/49 +f 50/49/50 66/64/50 62/66/50 +f 63/61/51 65/63/51 61/65/51 +f 62/66/52 66/64/52 64/62/52 +f 61/65/53 59/58/53 63/61/53 +f 64/62/54 60/60/54 62/66/54 +f 61/65/55 57/59/55 59/58/55 +f 60/60/56 58/57/56 62/66/56 +f 61/65/57 55/56/57 57/59/57 +f 58/57/58 56/55/58 62/66/58 +f 61/65/59 53/53/59 55/56/59 +f 56/55/60 54/52/60 62/66/60 +f 61/65/61 51/51/61 53/53/61 +f 54/52/62 52/50/62 62/66/62 +f 61/65/63 49/48/63 51/51/63 +f 52/50/64 50/49/64 62/66/64 +f 174/67/65 91/68/65 89/69/65 +f 175/70/66 91/68/66 176/71/66 +f 172/72/67 89/69/67 87/73/67 +f 173/74/68 90/75/68 175/70/68 +f 85/76/69 172/72/69 87/73/69 +f 173/74/70 86/77/70 88/78/70 +f 83/79/71 170/80/71 85/76/71 +f 171/81/72 84/82/72 86/77/72 +f 81/83/73 168/84/73 83/79/73 +f 169/85/74 82/86/74 84/82/74 +f 79/87/75 146/88/75 164/89/75 +f 147/90/76 80/91/76 165/92/76 +f 94/93/77 146/88/77 92/94/77 +f 95/95/78 147/90/78 149/96/78 +f 94/93/79 150/97/79 148/98/79 +f 151/99/80 95/95/80 149/96/80 +f 98/100/81 150/97/81 96/101/81 +f 99/102/82 151/99/82 153/103/82 +f 100/104/83 152/105/83 98/100/83 +f 101/106/84 153/103/84 155/107/84 +f 102/108/85 154/109/85 100/104/85 +f 103/110/86 155/107/86 157/111/86 +f 102/108/87 158/112/87 156/113/87 +f 159/114/88 103/110/88 157/111/88 +f 106/115/89 158/112/89 104/116/89 +f 107/117/90 159/114/90 161/118/90 +f 108/119/91 160/120/91 106/115/91 +f 109/121/92 161/118/92 163/122/92 +f 67/123/93 162/124/93 108/119/93 +f 67/123/94 163/122/94 68/125/94 +f 128/126/95 162/124/95 110/127/95 +f 129/128/96 163/122/96 161/118/96 +f 128/126/97 158/112/97 160/120/97 +f 159/114/98 129/128/98 161/118/98 +f 156/113/99 179/129/99 126/130/99 +f 157/111/100 180/131/100 159/114/100 +f 154/109/101 126/130/101 124/132/101 +f 155/107/102 127/133/102 157/111/102 +f 152/105/103 124/132/103 122/134/103 +f 153/103/104 125/135/104 155/107/104 +f 150/97/105 122/134/105 120/136/105 +f 151/99/106 123/137/106 153/103/106 +f 148/98/107 120/136/107 118/138/107 +f 149/96/108 121/139/108 151/99/108 +f 146/88/109 118/138/109 116/140/109 +f 147/90/110 119/141/110 149/96/110 +f 164/89/111 116/140/111 114/142/111 +f 165/92/112 117/143/112 147/90/112 +f 114/142/113 177/144/113 164/89/113 +f 177/144/114 115/145/114 165/92/114 +f 162/124/115 112/146/115 110/127/115 +f 163/122/116 113/147/116 68/125/116 +f 112/146/117 178/148/117 183/149/117 +f 178/148/118 113/147/118 184/150/118 +f 181/151/119 178/148/119 177/144/119 +f 182/152/120 178/148/120 184/150/120 +f 135/153/121 176/71/121 174/67/121 +f 176/71/122 136/154/122 175/70/122 +f 133/155/123 174/67/123 172/72/123 +f 175/70/124 134/156/124 173/74/124 +f 133/155/125 170/80/125 131/157/125 +f 134/156/126 171/81/126 173/74/126 +f 166/158/127 185/159/127 168/84/127 +f 186/160/128 167/161/128 169/85/128 +f 131/157/129 168/84/129 185/159/129 +f 169/85/130 132/162/130 186/160/130 +f 190/163/131 187/164/131 144/165/131 +f 190/163/132 188/166/132 189/167/132 +f 187/164/133 69/168/133 185/159/133 +f 188/166/134 69/168/134 189/167/134 +f 131/157/135 69/168/135 130/169/135 +f 132/162/135 69/168/135 186/160/135 +f 142/170/136 191/171/136 144/165/136 +f 192/172/137 143/173/137 145/174/137 +f 140/175/138 193/176/138 142/170/138 +f 194/177/139 141/178/139 143/173/139 +f 197/179/140 140/175/140 139/180/140 +f 198/181/141 141/178/141 196/182/141 +f 71/183/142 139/180/142 138/184/142 +f 71/183/143 139/180/143 198/181/143 +f 144/165/144 70/185/144 190/163/144 +f 145/174/145 70/185/145 192/172/145 +f 191/171/146 208/186/146 70/185/146 +f 192/172/147 208/186/147 207/187/147 +f 71/183/148 200/188/148 197/179/148 +f 201/189/149 71/183/149 198/181/149 +f 197/179/150 202/190/150 195/191/150 +f 203/192/151 198/181/151 196/182/151 +f 202/190/152 193/176/152 195/191/152 +f 203/192/153 194/177/153 205/193/153 +f 193/176/154 206/194/154 191/171/154 +f 207/187/155 194/177/155 192/172/155 +f 204/195/156 200/188/156 199/196/156 +f 205/193/157 201/189/157 203/192/157 +f 199/196/158 206/194/158 204/195/158 +f 207/187/159 199/196/159 205/193/159 +f 139/180/160 164/89/160 177/144/160 +f 165/92/161 139/180/161 177/144/161 +f 140/175/162 211/197/162 164/89/162 +f 212/198/163 141/178/163 165/92/163 +f 144/165/164 211/197/164 142/170/164 +f 145/174/165 212/198/165 214/199/165 +f 187/164/166 213/200/166 144/165/166 +f 188/166/167 214/199/167 167/161/167 +f 209/201/168 166/158/168 81/83/168 +f 210/202/169 167/161/169 214/199/169 +f 215/203/170 213/200/170 209/201/170 +f 216/204/171 214/199/171 212/198/171 +f 79/87/172 211/197/172 215/203/172 +f 212/198/173 80/91/173 216/204/173 +f 130/169/174 222/205/174 131/157/174 +f 130/169/175 223/206/175 72/207/175 +f 133/155/176 222/205/176 220/208/176 +f 223/206/177 134/156/177 221/209/177 +f 135/153/178 220/208/178 218/210/178 +f 221/209/179 136/154/179 219/211/179 +f 137/212/135 218/210/135 217/213/135 +f 219/211/135 137/212/135 217/213/135 +f 218/210/180 231/214/180 217/213/180 +f 219/211/181 231/214/181 230/215/181 +f 218/210/182 227/216/182 229/217/182 +f 228/218/183 219/211/183 230/215/183 +f 220/208/142 225/219/142 227/216/142 +f 226/220/184 221/209/184 228/218/184 +f 72/207/185 225/219/185 222/205/185 +f 72/207/186 226/220/186 224/221/186 +f 224/221/187 229/217/187 225/219/187 +f 230/215/188 224/221/188 226/220/188 +f 225/219/189 229/217/189 227/216/189 +f 228/218/190 230/215/190 226/220/190 +f 183/149/191 234/222/191 232/223/191 +f 235/224/192 184/150/192 233/225/192 +f 112/146/193 232/223/193 254/226/193 +f 233/225/194 113/147/194 255/227/194 +f 112/146/195 256/228/195 110/127/195 +f 113/147/196 257/229/196 255/227/196 +f 114/142/197 234/222/197 181/151/197 +f 115/145/198 235/224/198 253/230/198 +f 114/142/199 250/231/199 252/232/199 +f 251/233/200 115/145/200 253/230/200 +f 116/140/201 248/234/201 250/231/201 +f 249/235/202 117/143/202 251/233/202 +f 118/138/203 246/236/203 248/234/203 +f 247/237/204 119/141/204 249/235/204 +f 120/136/205 244/238/205 246/236/205 +f 245/239/206 121/139/206 247/237/206 +f 124/132/207 244/238/207 122/134/207 +f 125/135/208 245/239/208 243/240/208 +f 126/130/209 242/241/209 124/132/209 +f 127/133/210 243/240/210 241/242/210 +f 126/130/211 236/243/211 240/244/211 +f 237/245/212 127/133/212 241/242/212 +f 179/129/213 238/246/213 236/243/213 +f 239/247/214 180/131/214 237/245/214 +f 128/126/215 256/228/215 238/246/215 +f 257/229/216 129/128/216 239/247/216 +f 256/228/217 276/248/217 238/246/217 +f 257/229/218 277/249/218 259/250/218 +f 236/243/219 276/248/219 278/251/219 +f 277/249/220 237/245/220 279/252/220 +f 236/243/221 274/253/221 240/244/221 +f 237/245/222 275/254/222 279/252/222 +f 240/244/223 272/255/223 242/241/223 +f 241/242/224 273/256/224 275/254/224 +f 244/238/225 272/255/225 270/257/225 +f 273/256/226 245/239/226 271/258/226 +f 244/238/227 268/259/227 246/236/227 +f 245/239/228 269/260/228 271/258/228 +f 248/234/229 268/259/229 266/261/229 +f 269/260/230 249/235/230 267/262/230 +f 248/234/231 264/263/231 250/231/231 +f 249/235/232 265/264/232 267/262/232 +f 250/231/233 262/265/233 252/232/233 +f 251/233/234 263/266/234 265/264/234 +f 234/222/235 262/265/235 280/267/235 +f 263/266/236 235/224/236 281/268/236 +f 256/228/237 260/269/237 258/270/237 +f 261/271/238 257/229/238 259/250/238 +f 254/226/239 282/272/239 260/269/239 +f 283/273/240 255/227/240 261/271/240 +f 232/223/241 280/267/241 282/272/241 +f 281/268/242 233/225/242 283/273/242 +f 67/123/243 284/274/243 73/275/243 +f 285/276/244 67/123/244 73/275/244 +f 108/119/245 286/277/245 284/274/245 +f 287/278/246 109/121/246 285/276/246 +f 104/116/247 286/277/247 106/115/247 +f 105/279/248 287/278/248 289/280/248 +f 102/108/249 288/281/249 104/116/249 +f 103/110/250 289/280/250 291/282/250 +f 100/104/251 290/283/251 102/108/251 +f 101/106/252 291/282/252 293/284/252 +f 100/104/253 294/285/253 292/286/253 +f 295/287/254 101/106/254 293/284/254 +f 96/101/255 294/285/255 98/100/255 +f 97/288/256 295/287/256 297/289/256 +f 96/101/257 298/290/257 296/291/257 +f 299/292/258 97/288/258 297/289/258 +f 94/93/259 300/293/259 298/290/259 +f 301/294/260 95/95/260 299/292/260 +f 309/295/261 338/296/261 308/297/261 +f 309/298/262 339/299/262 329/300/262 +f 308/297/263 336/301/263 307/302/263 +f 308/303/264 337/304/264 339/299/264 +f 307/302/265 340/305/265 306/306/265 +f 307/307/266 341/308/266 337/304/266 +f 89/69/267 306/306/267 340/305/267 +f 306/306/268 90/75/268 341/308/268 +f 87/73/269 340/305/269 334/309/269 +f 341/308/270 88/78/270 335/310/270 +f 85/76/271 334/309/271 330/311/271 +f 335/310/272 86/77/272 331/312/272 +f 83/79/273 330/311/273 332/313/273 +f 331/312/274 84/82/274 333/314/274 +f 330/311/275 338/296/275 332/313/275 +f 339/299/276 331/312/276 333/314/276 +f 334/309/277 336/301/277 330/311/277 +f 335/310/278 337/304/278 341/308/278 +f 332/313/279 328/315/279 326/316/279 +f 333/314/280 329/300/280 339/299/280 +f 81/83/281 332/313/281 326/316/281 +f 333/314/282 82/86/282 327/317/282 +f 342/318/283 215/203/283 209/201/283 +f 343/319/284 216/204/284 345/320/284 +f 326/316/285 209/201/285 81/83/285 +f 327/317/286 210/202/286 343/319/286 +f 215/203/287 346/321/287 79/87/287 +f 216/204/288 347/322/288 345/320/288 +f 346/321/289 92/94/289 79/87/289 +f 347/322/290 93/323/290 301/294/290 +f 324/324/291 304/325/291 77/326/291 +f 325/327/292 304/328/292 353/329/292 +f 352/330/293 78/331/293 304/325/293 +f 353/329/294 78/332/294 351/333/294 +f 78/331/295 348/334/295 305/335/295 +f 349/336/296 78/332/296 305/337/296 +f 305/335/297 328/315/297 309/295/297 +f 329/300/298 305/337/298 309/298/298 +f 328/315/299 342/318/299 326/316/299 +f 329/300/300 343/319/300 349/336/300 +f 296/291/301 318/338/301 310/339/301 +f 319/340/302 297/289/302 311/341/302 +f 316/342/303 77/326/303 76/343/303 +f 317/344/304 77/345/304 325/327/304 +f 358/346/305 303/347/305 302/348/305 +f 359/349/306 303/350/306 357/351/306 +f 303/347/307 354/352/307 75/353/307 +f 355/354/308 303/350/308 75/355/308 +f 75/353/309 316/342/309 76/343/309 +f 317/344/310 75/355/310 76/356/310 +f 292/357/311 362/358/311 364/359/311 +f 363/360/312 293/361/312 365/362/312 +f 364/359/313 368/363/313 366/364/313 +f 369/365/314 365/362/314 367/366/314 +f 366/364/315 370/367/315 372/368/315 +f 371/369/316 367/366/316 373/370/316 +f 372/368/317 376/371/317 374/372/317 +f 377/373/318 373/370/318 375/374/318 +f 378/375/319 376/371/319 314/376/319 +f 379/377/320 377/373/320 375/374/320 +f 316/342/321 374/372/321 378/375/321 +f 375/374/322 317/344/322 379/377/322 +f 354/352/323 372/368/323 374/372/323 +f 373/370/324 355/354/324 375/374/324 +f 356/378/325 366/364/325 372/368/325 +f 367/366/326 357/351/326 373/370/326 +f 358/346/327 364/359/327 366/364/327 +f 365/362/328 359/349/328 367/366/328 +f 292/357/329 360/379/329 290/380/329 +f 293/361/330 361/381/330 365/362/330 +f 360/379/331 302/348/331 74/382/331 +f 361/381/332 302/383/332 359/349/332 +f 284/384/333 288/385/333 290/380/333 +f 289/386/334 285/387/334 291/388/334 +f 284/384/335 360/379/335 74/382/335 +f 361/381/336 285/387/336 74/389/336 +f 73/390/337 284/384/337 74/382/337 +f 74/389/338 285/387/338 73/391/338 +f 296/291/339 362/358/339 294/285/339 +f 297/289/340 363/360/340 311/341/340 +f 310/339/341 368/363/341 362/358/341 +f 369/365/342 311/341/342 363/360/342 +f 312/392/343 370/367/343 368/363/343 +f 371/369/344 313/393/344 369/365/344 +f 376/371/345 382/394/345 314/376/345 +f 377/373/346 383/395/346 371/369/346 +f 350/396/347 384/397/347 348/334/347 +f 351/333/348 385/398/348 387/399/348 +f 384/397/349 320/400/349 318/338/349 +f 385/398/350 321/401/350 387/399/350 +f 298/290/351 384/397/351 318/338/351 +f 385/398/352 299/292/352 319/340/352 +f 300/293/353 342/318/353 384/397/353 +f 343/319/354 301/294/354 385/398/354 +f 342/318/355 348/334/355 384/397/355 +f 385/398/356 349/336/356 343/319/356 +f 300/293/357 346/321/357 344/402/357 +f 345/320/358 347/322/358 301/294/358 +f 322/403/359 378/375/359 314/376/359 +f 323/404/360 379/377/360 381/405/360 +f 378/375/361 324/324/361 316/342/361 +f 379/377/362 325/327/362 381/405/362 +f 386/406/363 322/403/363 320/400/363 +f 387/399/364 323/404/364 381/405/364 +f 352/330/365 386/406/365 350/396/365 +f 353/329/366 387/399/366 381/405/366 +f 324/324/367 380/407/367 352/330/367 +f 353/329/368 381/405/368 325/327/368 +f 388/408/369 402/409/369 400/410/369 +f 389/411/370 403/412/370 415/413/370 +f 400/410/371 404/414/371 398/415/371 +f 405/416/372 401/417/372 399/418/372 +f 404/414/373 396/419/373 398/415/373 +f 405/416/374 397/420/374 407/421/374 +f 406/422/375 394/423/375 396/419/375 +f 407/421/376 395/424/376 409/425/376 +f 408/426/377 392/427/377 394/423/377 +f 409/425/378 393/428/378 411/429/378 +f 392/427/379 412/430/379 390/431/379 +f 413/432/380 393/428/380 391/433/380 +f 410/434/381 418/435/381 412/430/381 +f 419/436/382 411/429/382 413/432/382 +f 408/426/383 420/437/383 410/434/383 +f 421/438/384 409/425/384 411/429/384 +f 424/439/385 408/426/385 406/422/385 +f 425/440/386 409/425/386 423/441/386 +f 426/442/387 406/422/387 404/414/387 +f 427/443/388 407/421/388 425/440/388 +f 428/444/389 404/414/389 402/409/389 +f 429/445/390 405/416/390 427/443/390 +f 402/409/391 416/446/391 428/444/391 +f 417/447/392 403/412/392 429/445/392 +f 320/400/393 442/448/393 318/338/393 +f 321/401/394 443/449/394 445/450/394 +f 390/431/395 444/451/395 320/452/395 +f 391/433/396 445/453/396 413/432/396 +f 310/339/397 442/448/397 312/392/397 +f 443/449/398 311/341/398 313/393/398 +f 382/454/399 414/455/399 388/408/399 +f 415/413/400 383/456/400 389/411/400 +f 412/430/401 440/457/401 444/451/401 +f 441/458/402 413/432/402 445/453/402 +f 446/459/403 440/457/403 438/460/403 +f 447/461/404 441/458/404 445/453/404 +f 434/462/135 438/460/135 436/463/135 +f 439/464/135 435/465/135 437/466/135 +f 448/467/405 434/462/405 432/468/405 +f 449/469/406 435/465/406 447/461/406 +f 448/467/407 450/470/407 430/471/407 +f 449/469/408 451/472/408 433/473/408 +f 430/471/409 416/446/409 414/455/409 +f 431/474/410 417/447/410 451/472/410 +f 312/392/411 430/475/411 382/394/411 +f 431/476/412 313/393/412 383/395/412 +f 442/448/413 448/477/413 312/392/413 +f 443/449/414 449/478/414 447/479/414 +f 442/448/415 444/480/415 446/481/415 +f 447/479/416 445/450/416 443/449/416 +f 416/446/417 452/482/417 476/483/417 +f 453/484/418 417/447/418 477/485/418 +f 432/468/419 452/482/419 450/470/419 +f 433/473/420 453/484/420 463/486/420 +f 432/468/421 460/487/421 462/488/421 +f 461/489/422 433/473/422 463/486/422 +f 436/463/423 460/487/423 434/462/423 +f 437/466/424 461/489/424 459/490/424 +f 438/460/425 458/491/425 436/463/425 +f 439/464/426 459/490/426 457/492/426 +f 438/460/427 454/493/427 456/494/427 +f 455/495/428 439/464/428 457/492/428 +f 440/457/429 474/496/429 454/493/429 +f 475/497/429 441/458/429 455/495/429 +f 428/444/430 476/483/430 464/498/430 +f 477/485/431 429/445/431 465/499/431 +f 426/442/432 464/498/432 466/500/432 +f 465/499/433 427/443/433 467/501/433 +f 424/439/434 466/500/434 468/502/434 +f 467/501/435 425/440/435 469/503/435 +f 424/439/436 470/504/436 422/505/436 +f 425/440/437 471/506/437 469/503/437 +f 422/505/438 472/507/438 420/437/438 +f 423/441/439 473/508/439 471/506/439 +f 420/437/440 474/496/440 418/435/440 +f 421/438/441 475/497/441 473/508/441 +f 456/494/442 478/509/442 458/491/442 +f 457/492/443 479/510/443 481/511/443 +f 480/512/444 484/513/444 478/509/444 +f 481/511/445 485/514/445 483/515/445 +f 484/513/446 488/516/446 486/517/446 +f 489/518/447 485/514/447 487/519/447 +f 488/516/448 492/520/448 486/517/448 +f 489/518/449 493/521/449 491/522/449 +f 464/498/450 486/517/450 492/520/450 +f 487/519/451 465/499/451 493/521/451 +f 484/513/452 476/483/452 452/482/452 +f 485/514/453 477/485/453 487/519/453 +f 462/488/454 484/513/454 452/482/454 +f 463/486/455 485/514/455 479/510/455 +f 458/491/135 462/488/135 460/487/135 +f 463/486/135 459/490/135 461/489/135 +f 474/496/456 456/494/456 454/493/456 +f 475/497/457 457/492/457 481/511/457 +f 472/507/458 480/512/458 474/496/458 +f 481/511/459 473/508/459 475/497/459 +f 488/516/460 472/507/460 470/504/460 +f 489/518/461 473/508/461 483/515/461 +f 490/523/462 470/504/462 468/502/462 +f 491/522/463 471/506/463 489/518/463 +f 466/500/464 490/523/464 468/502/464 +f 491/522/465 467/501/465 469/503/465 +f 464/498/466 492/520/466 466/500/466 +f 467/501/467 493/521/467 465/499/467 +f 392/427/468 504/524/468 502/525/468 +f 505/526/469 393/428/469 503/527/469 +f 394/423/470 502/525/470 500/528/470 +f 503/527/471 395/424/471 501/529/471 +f 394/423/472 498/530/472 396/419/472 +f 395/424/473 499/531/473 501/529/473 +f 396/419/474 496/532/474 398/533/474 +f 397/420/475 497/534/475 499/531/475 +f 398/533/476 494/535/476 400/536/476 +f 399/537/477 495/538/477 497/534/477 +f 400/536/478 506/539/478 388/540/478 +f 401/541/479 507/542/479 495/538/479 +f 502/525/480 506/539/480 494/535/480 +f 503/527/481 507/542/481 505/526/481 +f 494/535/482 500/528/482 502/525/482 +f 501/529/483 495/538/483 503/527/483 +f 496/532/484 498/530/484 500/528/484 +f 501/529/485 499/531/485 497/534/485 +f 382/543/486 506/539/486 314/544/486 +f 383/545/487 507/542/487 389/546/487 +f 314/544/488 504/524/488 322/547/488 +f 505/526/489 315/548/489 323/549/489 +f 320/452/490 504/524/490 390/431/490 +f 505/526/491 321/550/491 391/433/491 +f 47/1/492 1/13/492 3/2/492 +f 4/4/493 2/16/493 48/5/493 +f 45/3/494 3/2/494 5/7/494 +f 6/9/495 4/4/495 46/6/495 +f 3/2/496 9/14/496 7/11/496 +f 8/12/497 10/15/497 4/4/497 +f 1/13/498 11/17/498 9/14/498 +f 10/15/499 12/20/499 2/16/499 +f 11/17/500 13/26/500 15/18/500 +f 16/19/501 14/27/501 12/20/501 +f 9/14/502 15/18/502 17/21/502 +f 18/22/503 16/19/503 10/15/503 +f 21/23/504 19/32/504 17/21/504 +f 22/24/505 16/19/505 18/22/505 +f 13/26/506 23/28/506 21/23/506 +f 22/24/507 24/31/507 14/27/507 +f 23/28/508 25/39/508 27/29/508 +f 28/30/509 26/54/509 24/31/509 +f 27/29/510 29/35/510 19/32/510 +f 28/30/511 22/24/511 20/25/511 +f 33/34/512 31/45/512 29/35/512 +f 34/36/513 28/30/513 30/33/513 +f 35/38/514 33/34/514 27/29/514 +f 36/40/515 26/54/515 28/30/515 +f 37/41/516 39/44/516 33/34/516 +f 38/42/517 36/40/517 34/36/517 +f 39/44/518 41/47/518 31/45/518 +f 40/43/519 34/36/519 32/37/519 +f 45/3/520 43/8/520 41/47/520 +f 46/6/521 40/43/521 42/46/521 +f 47/1/522 45/3/522 39/44/522 +f 48/5/523 38/42/523 40/43/523 +f 37/41/524 51/51/524 49/48/524 +f 38/42/525 48/5/525 50/49/525 +f 35/38/526 53/53/526 51/51/526 +f 36/40/527 38/42/527 52/50/527 +f 25/39/528 55/56/528 53/53/528 +f 26/54/529 36/40/529 54/52/529 +f 23/28/530 57/59/530 55/56/530 +f 24/31/531 26/54/531 56/55/531 +f 23/28/532 13/26/532 59/58/532 +f 60/60/533 14/27/533 24/31/533 +f 13/26/534 11/17/534 63/61/534 +f 64/62/535 12/20/535 14/27/535 +f 11/17/536 1/13/536 65/63/536 +f 66/64/537 2/16/537 12/20/537 +f 1/13/538 47/1/538 49/48/538 +f 50/49/539 48/5/539 2/16/539 +f 174/67/540 176/71/540 91/68/540 +f 175/70/541 90/75/541 91/68/541 +f 172/72/542 174/67/542 89/69/542 +f 173/74/543 88/78/543 90/75/543 +f 85/76/544 170/80/544 172/72/544 +f 173/74/545 171/81/545 86/77/545 +f 83/79/546 168/84/546 170/80/546 +f 171/81/547 169/85/547 84/82/547 +f 81/83/548 166/158/548 168/84/548 +f 169/85/549 167/161/549 82/86/549 +f 79/87/550 92/94/550 146/88/550 +f 147/90/551 93/323/551 80/91/551 +f 94/93/552 148/98/552 146/88/552 +f 95/95/553 93/323/553 147/90/553 +f 94/93/554 96/101/554 150/97/554 +f 151/99/555 97/288/555 95/95/555 +f 98/100/556 152/105/556 150/97/556 +f 99/102/557 97/288/557 151/99/557 +f 100/104/558 154/109/558 152/105/558 +f 101/106/559 99/102/559 153/103/559 +f 102/108/560 156/113/560 154/109/560 +f 103/110/561 101/106/561 155/107/561 +f 102/108/562 104/116/562 158/112/562 +f 159/114/563 105/279/563 103/110/563 +f 106/115/564 160/120/564 158/112/564 +f 107/117/565 105/279/565 159/114/565 +f 108/119/566 162/124/566 160/120/566 +f 109/121/567 107/117/567 161/118/567 +f 67/123/568 68/125/568 162/124/568 +f 67/123/569 109/121/569 163/122/569 +f 128/126/570 160/120/570 162/124/570 +f 129/128/571 111/551/571 163/122/571 +f 128/126/572 179/129/572 158/112/572 +f 159/114/573 180/131/573 129/128/573 +f 156/113/574 158/112/574 179/129/574 +f 157/111/575 127/133/575 180/131/575 +f 154/109/576 156/113/576 126/130/576 +f 155/107/577 125/135/577 127/133/577 +f 152/105/578 154/109/578 124/132/578 +f 153/103/579 123/137/579 125/135/579 +f 150/97/580 152/105/580 122/134/580 +f 151/99/581 121/139/581 123/137/581 +f 148/98/582 150/97/582 120/136/582 +f 149/96/583 119/141/583 121/139/583 +f 146/88/584 148/98/584 118/138/584 +f 147/90/585 117/143/585 119/141/585 +f 164/89/586 146/88/586 116/140/586 +f 165/92/587 115/145/587 117/143/587 +f 114/142/588 181/151/588 177/144/588 +f 177/144/589 182/152/589 115/145/589 +f 162/124/590 68/125/590 112/146/590 +f 163/122/591 111/551/591 113/147/591 +f 112/146/592 68/125/592 178/148/592 +f 178/148/593 68/125/593 113/147/593 +f 181/151/594 183/149/594 178/148/594 +f 182/152/595 177/144/595 178/148/595 +f 135/153/596 137/212/596 176/71/596 +f 176/71/597 137/212/597 136/154/597 +f 133/155/598 135/153/598 174/67/598 +f 175/70/599 136/154/599 134/156/599 +f 133/155/600 172/72/600 170/80/600 +f 134/156/601 132/162/601 171/81/601 +f 166/158/602 187/164/602 185/159/602 +f 186/160/603 188/166/603 167/161/603 +f 131/157/604 170/80/604 168/84/604 +f 169/85/605 171/81/605 132/162/605 +f 190/163/132 189/167/132 187/164/132 +f 190/163/606 145/174/606 188/166/606 +f 187/164/134 189/167/134 69/168/134 +f 188/166/607 186/160/607 69/168/607 +f 131/157/135 185/159/135 69/168/135 +f 132/162/135 130/169/135 69/168/135 +f 142/170/608 193/176/608 191/171/608 +f 192/172/609 194/177/609 143/173/609 +f 140/175/610 195/191/610 193/176/610 +f 194/177/611 196/182/611 141/178/611 +f 197/179/612 195/191/612 140/175/612 +f 198/181/613 139/180/613 141/178/613 +f 71/183/614 197/179/614 139/180/614 +f 144/165/615 191/171/615 70/185/615 +f 145/174/616 190/163/616 70/185/616 +f 191/171/146 206/194/146 208/186/146 +f 192/172/147 70/185/147 208/186/147 +f 71/183/617 199/196/617 200/188/617 +f 201/189/618 199/196/618 71/183/618 +f 197/179/619 200/188/619 202/190/619 +f 203/192/620 201/189/620 198/181/620 +f 202/190/621 204/195/621 193/176/621 +f 203/192/622 196/182/622 194/177/622 +f 193/176/623 204/195/623 206/194/623 +f 207/187/624 205/193/624 194/177/624 +f 204/195/625 202/190/625 200/188/625 +f 205/193/626 199/196/626 201/189/626 +f 199/196/627 208/186/627 206/194/627 +f 207/187/628 208/186/628 199/196/628 +f 139/180/629 140/175/629 164/89/629 +f 165/92/630 141/178/630 139/180/630 +f 140/175/631 142/170/631 211/197/631 +f 212/198/632 143/173/632 141/178/632 +f 144/165/633 213/200/633 211/197/633 +f 145/174/634 143/173/634 212/198/634 +f 187/164/635 166/158/635 213/200/635 +f 188/166/636 145/174/636 214/199/636 +f 209/201/637 213/200/637 166/158/637 +f 210/202/638 82/86/638 167/161/638 +f 215/203/639 211/197/639 213/200/639 +f 216/204/640 210/202/640 214/199/640 +f 79/87/641 164/89/641 211/197/641 +f 212/198/642 165/92/642 80/91/642 +f 130/169/643 72/207/643 222/205/643 +f 130/169/644 132/162/644 223/206/644 +f 133/155/645 131/157/645 222/205/645 +f 223/206/646 132/162/646 134/156/646 +f 135/153/647 133/155/647 220/208/647 +f 221/209/648 134/156/648 136/154/648 +f 137/212/649 135/153/649 218/210/649 +f 219/211/650 136/154/650 137/212/650 +f 218/210/180 229/217/180 231/214/180 +f 219/211/181 217/213/181 231/214/181 +f 218/210/651 220/208/651 227/216/651 +f 228/218/652 221/209/652 219/211/652 +f 220/208/142 222/205/142 225/219/142 +f 226/220/184 223/206/184 221/209/184 +f 72/207/185 224/221/185 225/219/185 +f 72/207/186 223/206/186 226/220/186 +f 224/221/653 231/214/653 229/217/653 +f 230/215/654 231/214/654 224/221/654 +f 183/149/655 181/151/655 234/222/655 +f 235/224/656 182/152/656 184/150/656 +f 112/146/657 183/149/657 232/223/657 +f 233/225/658 184/150/658 113/147/658 +f 112/146/659 254/226/659 256/228/659 +f 113/147/660 111/551/660 257/229/660 +f 114/142/661 252/232/661 234/222/661 +f 115/145/662 182/152/662 235/224/662 +f 114/142/663 116/140/663 250/231/663 +f 251/233/664 117/143/664 115/145/664 +f 116/140/665 118/138/665 248/234/665 +f 249/235/666 119/141/666 117/143/666 +f 118/138/667 120/136/667 246/236/667 +f 247/237/668 121/139/668 119/141/668 +f 120/136/669 122/134/669 244/238/669 +f 245/239/670 123/137/670 121/139/670 +f 124/132/671 242/241/671 244/238/671 +f 125/135/672 123/137/672 245/239/672 +f 126/130/673 240/244/673 242/241/673 +f 127/133/674 125/135/674 243/240/674 +f 126/130/675 179/129/675 236/243/675 +f 237/245/676 180/131/676 127/133/676 +f 179/129/677 128/126/677 238/246/677 +f 239/247/678 129/128/678 180/131/678 +f 128/126/679 110/127/679 256/228/679 +f 257/229/680 111/551/680 129/128/680 +f 256/228/681 258/270/681 276/248/681 +f 257/229/682 239/247/682 277/249/682 +f 236/243/683 238/246/683 276/248/683 +f 277/249/684 239/247/684 237/245/684 +f 236/243/685 278/251/685 274/253/685 +f 237/245/686 241/242/686 275/254/686 +f 240/244/687 274/253/687 272/255/687 +f 241/242/688 243/240/688 273/256/688 +f 244/238/689 242/241/689 272/255/689 +f 273/256/690 243/240/690 245/239/690 +f 244/238/691 270/257/691 268/259/691 +f 245/239/692 247/237/692 269/260/692 +f 248/234/693 246/236/693 268/259/693 +f 269/260/694 247/237/694 249/235/694 +f 248/234/695 266/261/695 264/263/695 +f 249/235/696 251/233/696 265/264/696 +f 250/231/697 264/263/697 262/265/697 +f 251/233/698 253/230/698 263/266/698 +f 234/222/235 252/232/235 262/265/235 +f 263/266/236 253/230/236 235/224/236 +f 256/228/699 254/226/699 260/269/699 +f 261/271/700 255/227/700 257/229/700 +f 254/226/701 232/223/701 282/272/701 +f 283/273/702 233/225/702 255/227/702 +f 232/223/703 234/222/703 280/267/703 +f 281/268/704 235/224/704 233/225/704 +f 67/123/705 108/119/705 284/274/705 +f 285/276/706 109/121/706 67/123/706 +f 108/119/707 106/115/707 286/277/707 +f 287/278/708 107/117/708 109/121/708 +f 104/116/709 288/281/709 286/277/709 +f 105/279/710 107/117/710 287/278/710 +f 102/108/711 290/283/711 288/281/711 +f 103/110/712 105/279/712 289/280/712 +f 100/104/713 292/286/713 290/283/713 +f 101/106/714 103/110/714 291/282/714 +f 100/104/715 98/100/715 294/285/715 +f 295/287/716 99/102/716 101/106/716 +f 96/101/717 296/291/717 294/285/717 +f 97/288/718 99/102/718 295/287/718 +f 96/101/719 94/93/719 298/290/719 +f 299/292/720 95/95/720 97/288/720 +f 94/93/721 92/94/721 300/293/721 +f 301/294/722 93/323/722 95/95/722 +f 309/295/723 328/315/723 338/296/723 +f 309/298/724 308/303/724 339/299/724 +f 308/297/725 338/296/725 336/301/725 +f 308/303/726 307/307/726 337/304/726 +f 307/302/727 336/301/727 340/305/727 +f 307/307/728 306/306/728 341/308/728 +f 89/69/729 91/68/729 306/306/729 +f 306/306/730 91/68/730 90/75/730 +f 87/73/731 89/69/731 340/305/731 +f 341/308/732 90/75/732 88/78/732 +f 85/76/733 87/73/733 334/309/733 +f 335/310/734 88/78/734 86/77/734 +f 83/79/735 85/76/735 330/311/735 +f 331/312/736 86/77/736 84/82/736 +f 330/311/737 336/301/737 338/296/737 +f 339/299/738 337/304/738 331/312/738 +f 334/309/739 340/305/739 336/301/739 +f 335/310/740 331/312/740 337/304/740 +f 332/313/741 338/296/741 328/315/741 +f 333/314/742 327/317/742 329/300/742 +f 81/83/743 83/79/743 332/313/743 +f 333/314/744 84/82/744 82/86/744 +f 342/318/745 344/402/745 215/203/745 +f 343/319/746 210/202/746 216/204/746 +f 326/316/747 342/318/747 209/201/747 +f 327/317/748 82/86/748 210/202/748 +f 215/203/749 344/402/749 346/321/749 +f 216/204/750 80/91/750 347/322/750 +f 346/321/751 300/293/751 92/94/751 +f 347/322/752 80/91/752 93/323/752 +f 324/324/753 352/330/753 304/325/753 +f 325/327/754 77/345/754 304/328/754 +f 352/330/755 350/396/755 78/331/755 +f 353/329/756 304/328/756 78/332/756 +f 78/331/757 350/396/757 348/334/757 +f 349/336/758 351/333/758 78/332/758 +f 305/335/759 348/334/759 328/315/759 +f 329/300/760 349/336/760 305/337/760 +f 328/315/761 348/334/761 342/318/761 +f 329/300/762 327/317/762 343/319/762 +f 296/291/763 298/290/763 318/338/763 +f 319/340/764 299/292/764 297/289/764 +f 316/342/765 324/324/765 77/326/765 +f 317/344/766 76/356/766 77/345/766 +f 358/346/767 356/378/767 303/347/767 +f 359/349/768 302/383/768 303/350/768 +f 303/347/769 356/378/769 354/352/769 +f 355/354/770 357/351/770 303/350/770 +f 75/353/771 354/352/771 316/342/771 +f 317/344/772 355/354/772 75/355/772 +f 292/357/773 294/285/773 362/358/773 +f 363/360/774 295/287/774 293/361/774 +f 364/359/775 362/358/775 368/363/775 +f 369/365/776 363/360/776 365/362/776 +f 366/364/777 368/363/777 370/367/777 +f 371/369/778 369/365/778 367/366/778 +f 372/368/779 370/367/779 376/371/779 +f 377/373/780 371/369/780 373/370/780 +f 378/375/781 374/372/781 376/371/781 +f 379/377/782 315/552/782 377/373/782 +f 316/342/783 354/352/783 374/372/783 +f 375/374/784 355/354/784 317/344/784 +f 354/352/785 356/378/785 372/368/785 +f 373/370/786 357/351/786 355/354/786 +f 356/378/787 358/346/787 366/364/787 +f 367/366/788 359/349/788 357/351/788 +f 358/346/789 360/379/789 364/359/789 +f 365/362/790 361/381/790 359/349/790 +f 292/357/791 364/359/791 360/379/791 +f 293/361/792 291/388/792 361/381/792 +f 360/379/793 358/346/793 302/348/793 +f 361/381/794 74/389/794 302/383/794 +f 284/384/795 286/553/795 288/385/795 +f 289/386/796 287/554/796 285/387/796 +f 284/384/797 290/380/797 360/379/797 +f 361/381/798 291/388/798 285/387/798 +f 296/291/799 310/339/799 362/358/799 +f 297/289/800 295/287/800 363/360/800 +f 310/339/801 312/392/801 368/363/801 +f 369/365/802 313/393/802 311/341/802 +f 312/392/803 382/394/803 370/367/803 +f 371/369/804 383/395/804 313/393/804 +f 376/371/805 370/367/805 382/394/805 +f 377/373/806 315/552/806 383/395/806 +f 350/396/807 386/406/807 384/397/807 +f 351/333/808 349/336/808 385/398/808 +f 384/397/809 386/406/809 320/400/809 +f 385/398/810 319/340/810 321/401/810 +f 298/290/811 300/293/811 384/397/811 +f 385/398/812 301/294/812 299/292/812 +f 300/293/813 344/402/813 342/318/813 +f 343/319/814 345/320/814 301/294/814 +f 322/403/815 380/407/815 378/375/815 +f 323/404/816 315/552/816 379/377/816 +f 378/375/817 380/407/817 324/324/817 +f 379/377/818 317/344/818 325/327/818 +f 386/406/819 380/407/819 322/403/819 +f 387/399/820 321/401/820 323/404/820 +f 352/330/821 380/407/821 386/406/821 +f 353/329/822 351/333/822 387/399/822 +f 388/408/823 414/455/823 402/409/823 +f 389/411/824 401/417/824 403/412/824 +f 400/410/825 402/409/825 404/414/825 +f 405/416/826 403/412/826 401/417/826 +f 404/414/827 406/422/827 396/419/827 +f 405/416/828 399/418/828 397/420/828 +f 406/422/829 408/426/829 394/423/829 +f 407/421/830 397/420/830 395/424/830 +f 408/426/831 410/434/831 392/427/831 +f 409/425/832 395/424/832 393/428/832 +f 392/427/833 410/434/833 412/430/833 +f 413/432/834 411/429/834 393/428/834 +f 410/434/835 420/437/835 418/435/835 +f 419/436/836 421/438/836 411/429/836 +f 408/426/837 422/505/837 420/437/837 +f 421/438/838 423/441/838 409/425/838 +f 424/439/839 422/505/839 408/426/839 +f 425/440/840 407/421/840 409/425/840 +f 426/442/841 424/439/841 406/422/841 +f 427/443/842 405/416/842 407/421/842 +f 428/444/843 426/442/843 404/414/843 +f 429/445/844 403/412/844 405/416/844 +f 402/409/845 414/455/845 416/446/845 +f 417/447/846 415/413/846 403/412/846 +f 320/400/847 444/480/847 442/448/847 +f 321/401/848 319/340/848 443/449/848 +f 390/431/849 412/430/849 444/451/849 +f 391/433/850 321/550/850 445/453/850 +f 310/339/851 318/338/851 442/448/851 +f 443/449/852 319/340/852 311/341/852 +f 382/454/853 430/471/853 414/455/853 +f 415/413/854 431/474/854 383/456/854 +f 412/430/855 418/435/855 440/457/855 +f 441/458/856 419/436/856 413/432/856 +f 446/459/857 444/451/857 440/457/857 +f 447/461/858 439/464/858 441/458/858 +f 434/462/859 446/459/859 438/460/859 +f 439/464/860 447/461/860 435/465/860 +f 448/467/861 446/459/861 434/462/861 +f 449/469/862 433/473/862 435/465/862 +f 448/467/863 432/468/863 450/470/863 +f 449/469/864 431/474/864 451/472/864 +f 430/471/865 450/470/865 416/446/865 +f 431/474/866 415/413/866 417/447/866 +f 312/392/867 448/477/867 430/475/867 +f 431/476/868 449/478/868 313/393/868 +f 442/448/869 446/481/869 448/477/869 +f 443/449/870 313/393/870 449/478/870 +f 416/446/871 450/470/871 452/482/871 +f 453/484/872 451/472/872 417/447/872 +f 432/468/873 462/488/873 452/482/873 +f 433/473/874 451/472/874 453/484/874 +f 432/468/421 434/462/421 460/487/421 +f 461/489/422 435/465/422 433/473/422 +f 436/463/875 458/491/875 460/487/875 +f 437/466/876 435/465/876 461/489/876 +f 438/460/877 456/494/877 458/491/877 +f 439/464/878 437/466/878 459/490/878 +f 438/460/879 440/457/879 454/493/879 +f 455/495/880 441/458/880 439/464/880 +f 440/457/881 418/435/881 474/496/881 +f 475/497/882 419/436/882 441/458/882 +f 428/444/883 416/446/883 476/483/883 +f 477/485/884 417/447/884 429/445/884 +f 426/442/885 428/444/885 464/498/885 +f 465/499/886 429/445/886 427/443/886 +f 424/439/887 426/442/887 466/500/887 +f 467/501/888 427/443/888 425/440/888 +f 424/439/889 468/502/889 470/504/889 +f 425/440/890 423/441/890 471/506/890 +f 422/505/891 470/504/891 472/507/891 +f 423/441/892 421/438/892 473/508/892 +f 420/437/893 472/507/893 474/496/893 +f 421/438/894 419/436/894 475/497/894 +f 456/494/895 480/512/895 478/509/895 +f 457/492/896 459/490/896 479/510/896 +f 480/512/897 482/555/897 484/513/897 +f 481/511/898 479/510/898 485/514/898 +f 484/513/899 482/555/899 488/516/899 +f 489/518/900 483/515/900 485/514/900 +f 488/516/901 490/523/901 492/520/901 +f 489/518/902 487/519/902 493/521/902 +f 464/498/903 476/483/903 486/517/903 +f 487/519/904 477/485/904 465/499/904 +f 484/513/905 486/517/905 476/483/905 +f 485/514/906 453/484/906 477/485/906 +f 462/488/907 478/509/907 484/513/907 +f 463/486/908 453/484/908 485/514/908 +f 458/491/909 478/509/909 462/488/909 +f 463/486/910 479/510/910 459/490/910 +f 474/496/911 480/512/911 456/494/911 +f 475/497/912 455/495/912 457/492/912 +f 472/507/913 482/555/913 480/512/913 +f 481/511/914 483/515/914 473/508/914 +f 488/516/915 482/555/915 472/507/915 +f 489/518/916 471/506/916 473/508/916 +f 490/523/917 488/516/917 470/504/917 +f 491/522/918 469/503/918 471/506/918 +f 466/500/919 492/520/919 490/523/919 +f 491/522/920 493/521/920 467/501/920 +f 392/427/921 390/431/921 504/524/921 +f 505/526/922 391/433/922 393/428/922 +f 394/423/923 392/427/923 502/525/923 +f 503/527/924 393/428/924 395/424/924 +f 394/423/925 500/528/925 498/530/925 +f 395/424/926 397/420/926 499/531/926 +f 396/419/927 498/530/927 496/532/927 +f 397/420/928 399/537/928 497/534/928 +f 398/533/929 496/532/929 494/535/929 +f 399/537/930 401/541/930 495/538/930 +f 400/536/931 494/535/931 506/539/931 +f 401/541/932 389/546/932 507/542/932 +f 502/525/933 504/524/933 506/539/933 +f 503/527/934 495/538/934 507/542/934 +f 494/535/935 496/532/935 500/528/935 +f 501/529/936 497/534/936 495/538/936 +f 382/543/937 388/540/937 506/539/937 +f 383/545/938 315/548/938 507/542/938 +f 314/544/939 506/539/939 504/524/939 +f 505/526/940 507/542/940 315/548/940 +f 320/452/941 322/547/941 504/524/941 +f 505/526/942 323/549/942 321/550/942 diff --git a/szescian.cpp b/szescian.cpp new file mode 100644 index 0000000..da4642b --- /dev/null +++ b/szescian.cpp @@ -0,0 +1,74 @@ +#include "szescian.h" +#include +#include +#include + +void szescian::create(float x, float y, float z, float KRAWEDZ) { + + this->c_x = x; + this->c_y = y; + this->c_z = z; + + // Parametry wierzcholkow + + GLfloat sa[3] = { x + 0.0f, y + 0.0f, z + 0.0f }; + GLfloat sb[3] = { x + KRAWEDZ, y + 0.0f, z + 0.0f }; + GLfloat sc[3] = { x + KRAWEDZ, y + KRAWEDZ, z + 0.0f }; + GLfloat sd[3] = { x + 0.0f, y + KRAWEDZ, z + 0.0f }; + GLfloat se[3] = { x + 0.0f, y + 0.0f, z - KRAWEDZ }; + GLfloat sf[3] = { x + KRAWEDZ, y + 0.0f, z - KRAWEDZ }; + GLfloat sg[3] = { x + KRAWEDZ, y + KRAWEDZ, z - KRAWEDZ }; + GLfloat sh[3] = { x + 0.0f, y + KRAWEDZ, z - KRAWEDZ }; + + // Sciany skladowe + + glColor3f(1.0f, 0.0f, 0.0f); + glBegin(GL_POLYGON); + glVertex3fv(sa); + glVertex3fv(sb); + glVertex3fv(sc); + glVertex3fv(sd); + glEnd(); + + + glColor3f(0.0f, 1.0f, 0.0f); + glBegin(GL_POLYGON); + glVertex3fv(sb); + glVertex3fv(sf); + glVertex3fv(sg); + glVertex3fv(sc); + glEnd(); + + glColor3f(0.0f, 0.0f, 1.0f); + glBegin(GL_POLYGON); + glVertex3fv(sf); + glVertex3fv(se); + glVertex3fv(sh); + glVertex3fv(sg); + glEnd(); + + glColor3f(1.0f, 1.0f, 0.0f); + glBegin(GL_POLYGON); + glVertex3fv(se); + glVertex3fv(sa); + glVertex3fv(sd); + glVertex3fv(sh); + glEnd(); + + glColor3f(0.0f, 1.0f, 1.0f); + glBegin(GL_POLYGON); + glVertex3fv(sd); + glVertex3fv(sc); + glVertex3fv(sg); + glVertex3fv(sh); + glEnd(); + + glColor3f(1.0f, 0.0f, 1.0f); + glBegin(GL_POLYGON); + glVertex3fv(sa); + glVertex3fv(sb); + glVertex3fv(sf); + glVertex3fv(se); + glEnd(); + +} diff --git a/szescian.h b/szescian.h new file mode 100644 index 0000000..2a1c8af --- /dev/null +++ b/szescian.h @@ -0,0 +1,11 @@ +#pragma once +class szescian +{ + private: + float c_x{0}; + float c_y{0}; + float c_z{0}; + public: + void create(float x, float y, float z, float KRAWEDZ); +}; +