Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stdlib.h>
- #include <GL/glut.h>
- #include <GL/glext.h>
- #include "imageloader.h"
- #include "pathconfig.h"
- using namespace std;
- void handleKeypress(unsigned char key, int x, int y)
- {
- switch (key)
- {
- case 27: //Escape key
- exit(0);
- }
- }
- // pretvaramo sliku u teksturu, \return id texture
- GLuint loadTexture(Image* image)
- {
- GLuint textureId;
- glGenTextures(1, &textureId); //rezervirati mjesto za teksturu
- glBindTexture(GL_TEXTURE_2D, textureId); //koju teksturu ce openGL editirati
- // preslikavanje slike na teksturu
- glTexImage2D(GL_TEXTURE_2D, //uvijek GL_TEXTURE_2D
- 0, // level mipmape - 0 za sada
- GL_RGB, // format koji opengl koristi za slikuFormat OpenGL uses for image
- image->width, image->height, // mozda sirina i visina?
- 0, //rub slike
- GL_RGB, //GL_RGB, jer su pikseli u tom formatu
- GL_UNSIGNED_BYTE, //GL_UNSIGNED_BYTE, jer su pikseli unsigned brojevi
- image->pixels); // napokon podaci
- return textureId; //vracamo id teksture
- }
- // pretvaramo sliku u mipmapu - teksturu, \return id texture
- GLuint loadMipmappedTexture(Image *image)
- {
- // argumenti isti kao i kod loadTexture
- GLuint textureId;
- glGenTextures(1, &textureId);
- glBindTexture(GL_TEXTURE_2D, textureId);
- gluBuild2DMipmaps(GL_TEXTURE_2D,
- GL_RGB,
- image->width, image->height,
- GL_RGB,
- GL_UNSIGNED_BYTE,
- image->pixels);
- return textureId;
- }
- GLuint _textureId1; // id teksture
- GLuint _textureId2; // id teksture
- GLuint _textureId3; // id teksture
- GLuint _textureId4; // id teksture
- GLuint _textureId5; // id teksture
- GLuint _textureId6; // id teksture
- void initRendering()
- {
- glEnable(GL_DEPTH_TEST);
- glEnable(GL_LIGHTING);
- glEnable(GL_LIGHT0);
- glEnable(GL_NORMALIZE);
- glEnable(GL_COLOR_MATERIAL);
- filePathBuilder fpath;
- Image* image1 = loadBMP(fpath.filePath("checkerboard.bmp"));
- _textureId1 = loadMipmappedTexture(image1);
- delete image1;
- Image* image2 = loadBMP(fpath.filePath("checkerboard.bmp"));
- _textureId2 = loadMipmappedTexture(image2);
- delete image2;
- Image* image3 = loadBMP(fpath.filePath("checkerboard.bmp"));
- _textureId3 = loadMipmappedTexture(image3);
- delete image3;
- Image* image4 = loadBMP(fpath.filePath("checkerboard.bmp"));
- _textureId4 = loadMipmappedTexture(image4);
- delete image4;
- Image* image5 = loadBMP(fpath.filePath("checkerboard.bmp"));
- _textureId5 = loadMipmappedTexture(image5);
- delete image5;
- Image* image6 = loadBMP(fpath.filePath("checkerboard.bmp"));
- _textureId6 = loadMipmappedTexture(image6);
- delete image6;
- }
- void handleResize(int w, int h)
- {
- glViewport(0, 0, w, h);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- gluPerspective(45.0, (float)w / (float)h, 1.0, 200.0);
- }
- const float BOX_SIZE = 7.0f;
- void drawBox()
- {
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glEnable(GL_TEXTURE_2D);
- glBindTexture(GL_TEXTURE_2D, _textureId1);
- glBegin(GL_QUADS);
- //Top face
- glNormal3f(0.0, 1.0f, 0.0f);
- glTexCoord2f(0.0f, 0.0f);
- glVertex3f(-2.5f, -2.5f, 2.5f);
- glTexCoord2f(1.0f, 0.0f);
- glVertex3f(2.5f, -2.5f, 2.5f);
- glTexCoord2f(1.0f, 1.0f);
- glVertex3f(2.5f, -2.5f, -2.5f);
- glTexCoord2f(0.0f, 1.0f);
- glVertex3f(-2.5f, -2.5f, -2.5f);
- glEnd();
- glBindTexture(GL_TEXTURE_2D, _textureId2);
- //Bottom face
- //glColor3f(1.0f, 0.0f, 1.0f);
- glNormal3f(0.0, -1.0f, 0.0f);
- glVertex3f(-BOX_SIZE / 2, -BOX_SIZE / 2, -BOX_SIZE / 2);
- glVertex3f(BOX_SIZE / 2, -BOX_SIZE / 2, -BOX_SIZE / 2);
- glVertex3f(BOX_SIZE / 2, -BOX_SIZE / 2, BOX_SIZE / 2);
- glVertex3f(-BOX_SIZE / 2, -BOX_SIZE / 2, BOX_SIZE / 2);
- glBegin(GL_QUADS);
- glNormal3f(0.0, 1.0f, 0.0f);
- glTexCoord2f(0.0f, 0.0f);
- glVertex3f(-2.5f, -2.5f, 2.5f);
- glTexCoord2f(1.0f, 0.0f);
- glVertex3f(2.5f, -2.5f, 2.5f);
- glTexCoord2f(1.0f, 1.0f);
- glVertex3f(2.5f, -2.5f, -2.5f);
- glTexCoord2f(0.0f, 1.0f);
- glVertex3f(-2.5f, -2.5f, -2.5f);
- glEnd();
- glBindTexture(GL_TEXTURE_2D, _textureId3);
- //Left face
- glNormal3f(-1.0, 0.0f, 0.0f);
- // glColor3f(0.0f, 1.0f, 1.0f);
- glVertex3f(-BOX_SIZE / 2, -BOX_SIZE / 2, -BOX_SIZE / 2);
- glVertex3f(-BOX_SIZE / 2, -BOX_SIZE / 2, BOX_SIZE / 2);
- // glColor3f(0.0f, 0.0f, 1.0f);
- glVertex3f(-BOX_SIZE / 2, BOX_SIZE / 2, BOX_SIZE / 2);
- glVertex3f(-BOX_SIZE / 2, BOX_SIZE / 2, -BOX_SIZE / 2);
- glBindTexture(GL_TEXTURE_2D, _textureId4);
- //Right face
- glNormal3f(1.0, 0.0f, 0.0f);
- // glColor3f(1.0f, 0.0f, 0.0f);
- glVertex3f(BOX_SIZE / 2, -BOX_SIZE / 2, -BOX_SIZE / 2);
- glVertex3f(BOX_SIZE / 2, BOX_SIZE / 2, -BOX_SIZE / 2);
- // glColor3f(0.0f, 1.0f, 0.0f);
- glVertex3f(BOX_SIZE / 2, BOX_SIZE / 2, BOX_SIZE / 2);
- glVertex3f(BOX_SIZE / 2, -BOX_SIZE / 2, BOX_SIZE / 2);
- glEnd();
- // glColor3f(1.0f, 1.0f, 1.0f);
- glBegin(GL_QUADS);
- //Front face
- glNormal3f(0.0, 1.0f, 0.0f);
- glTexCoord2f(0.0f, 0.0f);
- glVertex3f(-2.5f, -2.5f, 2.5f);
- glTexCoord2f(1.0f, 0.0f);
- glVertex3f(2.5f, -2.5f, 2.5f);
- glTexCoord2f(1.0f, 1.0f);
- glVertex3f(2.5f, -2.5f, -2.5f);
- glTexCoord2f(0.0f, 1.0f);
- glVertex3f(-2.5f, -2.5f, -2.5f);
- glEnd();
- glBindTexture(GL_TEXTURE_2D, _textureId6);
- //Back face
- glNormal3f(0.0, 0.0f, -1.0f);
- glVertex3f(-BOX_SIZE / 2, -BOX_SIZE / 2, -BOX_SIZE / 2);
- glVertex3f(-BOX_SIZE / 2, BOX_SIZE / 2, -BOX_SIZE / 2);
- glVertex3f(BOX_SIZE / 2, BOX_SIZE / 2, -BOX_SIZE / 2);
- glVertex3f(BOX_SIZE / 2, -BOX_SIZE / 2, -BOX_SIZE / 2);
- glEnd();
- }
- void drawScene()
- {
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- gluLookAt(-2, 10, -17,
- 0, 0, 0,
- 0, 1, 0);
- //glEnable(GL_TEXTURE_2D);
- //glBindTexture(GL_TEXTURE_2D, _textureId);
- drawBox();
- /* glBegin(GL_TRIANGLES);
- glNormal3f(0.0f, 0.0f, 1.0f);
- glTexCoord2f(0.0f, 0.0f);
- glVertex3f(-2.5f, -2.5f, -2.5f);
- glTexCoord2f(5.0f, 5.0f);
- glVertex3f(0.0f, 2.5f, -2.5f);
- glTexCoord2f(10.0f, 0.0f);
- glVertex3f(2.5f, -2.5f, -2.5f);
- glEnd();*/
- GLfloat ambientLight[] = {0.3f, 0.3f, 0.3f, 1.0f};
- glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambientLight);
- GLfloat lightColor[] = {0.7f, 0.7f, 0.7f, 1.0f};
- GLfloat lightPos[] = {-0.2f, 0.3f, -1, 0.0f};
- glLightfv(GL_LIGHT0, GL_DIFFUSE, lightColor);
- glLightfv(GL_LIGHT0, GL_POSITION, lightPos);
- glutSwapBuffers();
- }
- int main(int argc, char** argv)
- {
- glutInit(&argc, argv);
- glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
- glutInitWindowSize(400, 400);
- glutCreateWindow("gl_teksture");
- initRendering();
- glutDisplayFunc(drawScene);
- glutKeyboardFunc(handleKeypress);
- glutReshapeFunc(handleResize);
- glutMainLoop();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement