Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifndef FUNCTIONS_
- #define FUNCTIONS_
- #include <windows.h>
- #include <GL/gl.h>
- #include "glut.h"
- #include "SOIL.h"
- #define _USE_MATH_DEFINES
- #include <cmath>
- #include <iostream>
- GLUquadricObj* myReusableQuadric = 0;
- GLuint kabina[20];
- GLuint maska[4];
- GLuint przycz[3];
- void drawGluSlantCylinder(double height, double radiusBase, double radiusTop, int slices, int stacks)
- {
- if (!myReusableQuadric) {
- myReusableQuadric = gluNewQuadric();
- // Should (but don't) check if pointer is still null --- to catch memory allocation errors.
- gluQuadricNormals(myReusableQuadric, GL_FLAT);
- gluQuadricTexture(myReusableQuadric, GL_TRUE);
- }
- // Draw the cylinder.
- glBindTexture(GL_TEXTURE_2D, kabina[0]);
- gluCylinder(myReusableQuadric, radiusBase, radiusTop, height, slices, stacks);
- }
- void drawGluCylinder(double height, double radius, int slices, int stacks) {
- drawGluSlantCylinder(height, radius, radius, slices, stacks);
- }
- void drawGluSlantCylinderWithCaps(double height, double radiusBase, double radiusTop, int slices, int stacks)
- {
- drawGluSlantCylinder(height, radiusBase, radiusTop, slices, stacks);
- // Draw the top disk cap
- glPushMatrix();
- glTranslated(0.0, 0.0, height);
- gluDisk(myReusableQuadric, 0.0, radiusTop, slices, stacks);
- glPopMatrix();
- // Draw the bottom disk cap
- glPushMatrix();
- glRotated(180.0, 1.0, 0.0, 0.0);
- gluDisk(myReusableQuadric, 0.0, radiusBase, slices, stacks);
- glPopMatrix();
- }
- void drawGluCylinderWithCaps(double height, double radius, int slices, int stacks) {
- drawGluSlantCylinderWithCaps(height, radius, radius, slices, stacks);
- }
- void mesh(int width, int height)
- {
- glLineWidth(2);
- glBegin(GL_LINES);
- for (int i = 0; i <= width; ++i)
- {
- for (int j = 0; j < height; ++j)
- {
- glVertex3f(i, 0, j);
- glVertex3f(i, 0, j + 1);
- }
- }
- for (int i = 0; i <= height; ++i)
- {
- for (int j = 0; j < width; ++j)
- {
- glVertex3f(j, 0, i);
- glVertex3f(j + 1, 0, i);
- }
- }
- glEnd();
- }
- float ver[8][3] =
- {
- { -1.0, 2.0, 1.0 },
- { -0.8, 3.5, 0.8 },
- { 1.0, 3.5, 0.8 },
- { 1.4, 2.0, 1.0 },
- { -1.0, 2.0, -1.0 },
- { -0.8, 3.5, -0.8 },
- { 1.0, 3.5, -0.8 },
- { 1.4, 2.0, -1.0 },
- };
- float ver1[8][3] =
- {
- { -1.0, 0.6, 1.0 },
- { -1.0, 2.0, 1.0 },
- { 1.4, 2.0, 1.0 },
- { 1.4, 0.6, 1.0 },
- { -1.0, 0.6, -1.0 },
- { -1.0, 2.0, -1.0 },
- { 1.4, 2.0, -1.0 },
- { 1.4, 0.6, -1.0 },
- };
- float ver2[8][3] =
- {
- { 1.4, 0.6, 0.5 },
- { 1.4, 2.0, 0.5 },
- { 3.7, 2.0, 0.5 },
- { 3.7, 0.6, 0.5 },
- { 1.4, 0.6, -0.5 },
- { 1.4, 2.0, -0.5 },
- { 3.7, 2.0, -0.5 },
- { 3.7, 0.6, -0.5 },
- };
- float przyczepa[8][3] =
- {
- { 0.0, 0.0, -1.5 },
- { 0.0, 0.7, -1.5 },
- {-4.0, 0.7, -1.5},
- {-4.0, 0.0, -1.5},
- {0.0, 0.0, 1.5},
- {0.0, 0.7, 1.5},
- { -4.0, 0.7, 1.5 },
- {-4.0, 0.0, 1.5}
- };
- /*glnormal3f!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/
- void quad(int a, int b, int c, int d, float (&ver1)[8][3], int texture)
- {
- glDisable(GL_BLEND);
- glBindTexture(GL_TEXTURE_2D, kabina[texture]);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
- glBegin(GL_QUADS);
- glTexCoord2f(0, 1);
- glVertex3fv(ver1[a]);
- glTexCoord2f(1, 1);
- glVertex3fv(ver1[b]);
- glTexCoord2f(1, 0);
- glVertex3fv(ver1[c]);
- glTexCoord2f(0, 0);
- glVertex3fv(ver1[d]);
- glEnd();
- }
- void colorcube()
- {
- glPushMatrix();
- glPushAttrib(GL_ENABLE_BIT);
- glEnable(GL_TEXTURE_2D);
- glEnable(GL_DEPTH_TEST);
- glDisable(GL_BLEND);
- quad(0, 3, 2, 1, ver,12); //góra kabiny bok 1
- quad(2, 3, 7, 6, ver,14); // góra przód
- quad(1, 2, 6, 5, ver,18); // wierzch kabiny
- quad(4, 5, 6, 7, ver,13); //góra kabiny bok 2
- quad(0, 1, 5, 4, ver,16); //dół tył
- quad(0, 3, 2, 1, ver1,10); //dół kabiny bok 1
- quad(2, 3, 7, 6, ver1,15); //dół przód
- quad(0, 4, 7, 3, ver1,17); // spód kabiny
- quad(4, 5, 6, 7, ver1,11); // dół kabiny bok 2
- quad(0, 1, 5, 4, ver1,17); // doł tył
- quad(0, 3, 2, 1, ver2,7); //bokl
- quad(2, 3, 7, 6, ver2,6); //przod
- quad(1, 2, 6, 5, ver2,9); //wierzch
- quad(4, 5, 6, 7, ver2,8); //bokp
- glDisable(GL_TEXTURE_2D);
- glPopAttrib();
- glPopMatrix();
- }
- void RysujDyszel()
- {
- glPushMatrix();
- //glTranslatef(-4.0, trailerWheelRadius, -(trailerWheelBase / 2 + trailerWheelWidth));
- glTranslatef(0.0, 1.0, 0.0);
- glRotatef(-90, 0.0, 1.0,0.0);
- drawGluSlantCylinderWithCaps(5, 0.1, 0.1, 10, 10);
- glPopMatrix();
- }
- void rysujPrzyczepe()
- {
- glPushMatrix();
- glTranslatef(-1.5, 1.4, 0.0);
- glPushAttrib(GL_ENABLE_BIT);
- glEnable(GL_TEXTURE_2D);
- glEnable(GL_DEPTH_TEST);
- glEnable(GL_LIGHTING);
- glDisable(GL_BLEND);
- quad(0, 3, 2, 1, przyczepa, 2); //lewy bok
- quad(2, 3, 7, 6, przyczepa, 3); //tył
- quad(0, 4, 7, 3, przyczepa, 0); //dno
- quad(4, 5, 6, 7, przyczepa, 5); //prawy bok
- quad(0, 1, 5, 4, przyczepa, 4); //przod
- glPopAttrib();
- glPopMatrix();
- }
- void loadTextures()
- {
- kabina[0] = SOIL_load_OGL_texture("img/szyba.jpg",
- SOIL_LOAD_AUTO,
- SOIL_CREATE_NEW_ID,
- SOIL_FLAG_MIPMAPS |
- SOIL_FLAG_INVERT_Y |
- SOIL_FLAG_COMPRESS_TO_DXT);
- kabina[1] = SOIL_load_OGL_texture("img/reszta.jpg",
- SOIL_LOAD_AUTO,
- SOIL_CREATE_NEW_ID,
- SOIL_FLAG_MIPMAPS |
- SOIL_FLAG_INVERT_Y |
- SOIL_FLAG_COMPRESS_TO_DXT);
- kabina[2] = SOIL_load_OGL_texture("img/przyczepa/bokp1.jpg",
- SOIL_LOAD_AUTO,
- SOIL_CREATE_NEW_ID,
- SOIL_FLAG_MIPMAPS |
- SOIL_FLAG_INVERT_Y |
- SOIL_FLAG_COMPRESS_TO_DXT);
- kabina[3] = SOIL_load_OGL_texture("img/przyczepa/frontp1.jpg",
- SOIL_LOAD_AUTO,
- SOIL_CREATE_NEW_ID,
- SOIL_FLAG_MIPMAPS |
- SOIL_FLAG_INVERT_Y |
- SOIL_FLAG_COMPRESS_TO_DXT);
- kabina[4] = SOIL_load_OGL_texture("img/przyczepa/frontp2.jpg",
- SOIL_LOAD_AUTO,
- SOIL_CREATE_NEW_ID,
- SOIL_FLAG_MIPMAPS |
- SOIL_FLAG_INVERT_Y |
- SOIL_FLAG_COMPRESS_TO_DXT);
- kabina[5] = SOIL_load_OGL_texture("img/przyczepa/bokp2.jpg",
- SOIL_LOAD_AUTO,
- SOIL_CREATE_NEW_ID,
- SOIL_FLAG_MIPMAPS |
- SOIL_FLAG_INVERT_Y |
- SOIL_FLAG_COMPRESS_TO_DXT);
- kabina[6] = SOIL_load_OGL_texture("img/trator/przod.jpg",
- SOIL_LOAD_AUTO,
- SOIL_CREATE_NEW_ID,
- SOIL_FLAG_MIPMAPS |
- SOIL_FLAG_INVERT_Y |
- SOIL_FLAG_COMPRESS_TO_DXT);
- kabina[7] = SOIL_load_OGL_texture("img/trator/bok1.jpg",
- SOIL_LOAD_AUTO,
- SOIL_CREATE_NEW_ID,
- SOIL_FLAG_MIPMAPS |
- SOIL_FLAG_INVERT_Y |
- SOIL_FLAG_COMPRESS_TO_DXT);
- kabina[8] = SOIL_load_OGL_texture("img/trator/bok.jpg",
- SOIL_LOAD_AUTO,
- SOIL_CREATE_NEW_ID,
- SOIL_FLAG_MIPMAPS |
- SOIL_FLAG_INVERT_Y |
- SOIL_FLAG_COMPRESS_TO_DXT);
- kabina[9] = SOIL_load_OGL_texture("img/trator/maska.jpg",
- SOIL_LOAD_AUTO,
- SOIL_CREATE_NEW_ID,
- SOIL_FLAG_MIPMAPS |
- SOIL_FLAG_INVERT_Y |
- SOIL_FLAG_COMPRESS_TO_DXT);
- kabina[10] = SOIL_load_OGL_texture("img/trator/kab1.jpg",
- SOIL_LOAD_AUTO,
- SOIL_CREATE_NEW_ID,
- SOIL_FLAG_MIPMAPS |
- SOIL_FLAG_INVERT_Y |
- SOIL_FLAG_COMPRESS_TO_DXT);
- kabina[11] = SOIL_load_OGL_texture("img/trator/kab2.jpg",
- SOIL_LOAD_AUTO,
- SOIL_CREATE_NEW_ID,
- SOIL_FLAG_MIPMAPS |
- SOIL_FLAG_INVERT_Y |
- SOIL_FLAG_COMPRESS_TO_DXT);
- kabina[12] = SOIL_load_OGL_texture("img/trator/kab3.jpg",
- SOIL_LOAD_AUTO,
- SOIL_CREATE_NEW_ID,
- SOIL_FLAG_MIPMAPS |
- SOIL_FLAG_INVERT_Y |
- SOIL_FLAG_COMPRESS_TO_DXT);
- kabina[13] = SOIL_load_OGL_texture("img/trator/kab4.jpg",
- SOIL_LOAD_AUTO,
- SOIL_CREATE_NEW_ID,
- SOIL_FLAG_MIPMAPS |
- SOIL_FLAG_INVERT_Y |
- SOIL_FLAG_COMPRESS_TO_DXT);
- kabina[14] = SOIL_load_OGL_texture("img/trator/kab5.jpg",
- SOIL_LOAD_AUTO,
- SOIL_CREATE_NEW_ID,
- SOIL_FLAG_MIPMAPS |
- SOIL_FLAG_INVERT_Y |
- SOIL_FLAG_COMPRESS_TO_DXT);
- kabina[15] = SOIL_load_OGL_texture("img/trator/kab6.jpg",
- SOIL_LOAD_AUTO,
- SOIL_CREATE_NEW_ID,
- SOIL_FLAG_MIPMAPS |
- SOIL_FLAG_INVERT_Y |
- SOIL_FLAG_COMPRESS_TO_DXT);
- kabina[16] = SOIL_load_OGL_texture("img/trator/kab7.jpg",
- SOIL_LOAD_AUTO,
- SOIL_CREATE_NEW_ID,
- SOIL_FLAG_MIPMAPS |
- SOIL_FLAG_INVERT_Y |
- SOIL_FLAG_COMPRESS_TO_DXT);
- kabina[17] = SOIL_load_OGL_texture("img/trator/kab8.jpg",
- SOIL_LOAD_AUTO,
- SOIL_CREATE_NEW_ID,
- SOIL_FLAG_MIPMAPS |
- SOIL_FLAG_INVERT_Y |
- SOIL_FLAG_COMPRESS_TO_DXT);
- }
- void RysujOsie(float rozmiar)
- {
- glBegin(GL_LINES);
- glVertex3f(0, 0, 0); glVertex3f(rozmiar, 0, 0); //OX, w prawo
- glVertex3f(0, 0, 0); glVertex3f(0, rozmiar, 0); //OY, do gory
- glVertex3f(0, 0, 0); glVertex3f(0, 0, rozmiar); //OZ, do kamery
- glEnd();
- }
- void light()
- {
- GLfloat mat_ambient[] = { 0.1, 0.1, 0.1, 1.0 };
- GLfloat mat_diffuse[] = { 1.0, 1.0, 1.0, 1.0 };
- GLfloat mat_specular[] = { 1, 1, 1, 1.0 };
- GLfloat shininess = 40;
- GLfloat lm_ambient[] = { 0.2, 0.2, 0.2, 1.0 };
- GLfloat spot_cutoff = 90;
- GLfloat spot_exponent = 50;
- GLfloat attenuation_const = 0;
- GLfloat attenuation_lin = 0.0;
- GLfloat attenuation_quad = 0.005;
- glEnable(GL_LIGHTING);
- glEnable(GL_COLOR_MATERIAL);
- glEnable(GL_LIGHT0);
- glMaterialfv(GL_FRONT && GL_BACK, GL_AMBIENT, mat_ambient);
- //glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
- glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
- glMaterialf(GL_FRONT, GL_SHININESS, shininess);
- //glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, spot_cutoff);
- //glLightf(GL_LIGHT0, GL_SPOT_EXPONENT, spot_exponent);
- //glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, attenuation_const);
- //glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, attenuation_lin);
- //glLightf(GL_LIGHT0, GL_QUADRATIC_ATTENUATION, attenuation_quad);
- glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lm_ambient);
- //GLfloat light_red[4] = { 1.0, 0.0, 0.0, 1.0 };
- //GLfloat reset[4] = { 0.0, 0.0, 0.0, 1.0 };
- //GLfloat spot_direction[] = { 0.0, 0.0, 0.0, 0.0 };
- GLfloat light_position[] = { 0.0, 10, 0.0, 1.0 };
- glLightfv(GL_LIGHT0, GL_POSITION, light_position);
- //glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, spot_direction);
- //this->moveLights();
- }
- #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement