Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <math.h>
- #include <stdlib.h>
- #include <GL/gl.h>
- #include <GL/glu.h>
- #include "render.h"
- enum GLDisplayListNames
- {
- Wall1=1,
- Wall2=2,
- Floor=3,
- Wall3=4,
- Wall4=5,
- Wall6=6
- };
- // zmiana rozmiaru okna
- void resizeGLScene(unsigned int width, unsigned int height)
- {
- if (height == 0) height = 1; // zabezpiecznie dla okna o zerowej wysokosci
- glViewport(0, 0, width, height);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- gluPerspective(45.0f, (GLfloat)width / (GLfloat)height, 1.0f, 500.0f);
- glMatrixMode(GL_MODELVIEW);
- }
- // glowna funkcja inicjujaca
- int initGL(void)
- {
- #define WIDTH 8
- #define HEIGHT 8
- #define W {255,255,255}
- #define R {255,127,127}
- GLubyte texture8 [WIDTH][HEIGHT][3]={{W,W,W,W,W,W,W,W}, // definicja tekstury
- {R,R,R,W,R,R,R,R},
- {R,R,R,W,R,R,R,R},
- {R,R,R,W,R,R,R,R},
- {W,W,W,W,W,W,W,W},
- {R,R,R,R,R,R,R,W},
- {R,R,R,R,R,R,R,W},
- {R,R,R,R,R,R,R,W}};
- glTexImage2D(GL_TEXTURE_2D, 0, 3, WIDTH, HEIGHT, 0, GL_RGB, GL_UNSIGNED_BYTE, texture8);
- glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
- glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
- glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
- glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
- glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE); //GL_DECAL
- glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
- glClearColor(0.1f, 0.3f, 0.7f, 0.0f); // (0.0f, 0.0f, 0.0f, 0.0f);
- glClearDepth(1.0f);
- glEnable(GL_LIGHTING);
- glEnable(GL_DEPTH_TEST);
- glDepthFunc(GL_LEQUAL);
- glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
- return 1;
- }
- // renderowanie sceny
- int drawGLScene(int counter)
- {
- GLfloat BlueSurface[] = { 0.0f, 0.0f, 1.0f, 1.0f};
- GLfloat GreenSurface[] = { 0.0f, 1.0f, 0.0f, 1.0f};
- GLfloat LightAmbient[] = { 0.1f, 0.1f, 0.1f, 0.1f };
- GLfloat LightDiffuse[] = { 0.7f, 0.7f, 0.7f, 0.7f };
- GLfloat LightPosition[] = { 5.0f, 5.0f, 5.0f, 0.0f };
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- glLightfv(GL_LIGHT0, GL_AMBIENT, LightAmbient); // swiatlo otoczenia
- glLightfv(GL_LIGHT0, GL_DIFFUSE, LightDiffuse); // swiatlo rozproszone
- glLightfv(GL_LIGHT0, GL_POSITION, LightPosition);
- glEnable(GL_LIGHT0);
- glEnable(GL_TEXTURE_2D);
- glPushMatrix();
- gluLookAt(0, 1/*3*/, 10 , 0, 0, 0 , 0, 1, 0);
- glRotated(counter, 0, 1, 0);
- glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, BlueSurface);
- glCallList(Wall1);
- glCallList(Wall2);
- glCallList(Wall3);
- glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, GreenSurface);
- glCallList(Floor);
- glPopMatrix();
- glFlush();
- return 1;
- }
- void CreateMaze(void)
- {
- glNewList(Wall1,GL_COMPILE); // GL_COMPILE - lista jest kompilowana,
- // ale nie wykonywana
- glBegin(GL_QUAD_STRIP); // inne opcje: GL_POINTS, GL_LINES, GL_LINE_STRIP,
- // GL_LINE_LOOP, GL_TRIANGLES, GL_TRIANGLE_STRIP,
- // GL_TRIANGLE_FAN, GL_QUAD_STRIP, GL_POLYGON
- int liczba_scian = 25;
- for (int i = 0; i <= liczba_scian+1; i++) {
- float kat = i*((1.0/liczba_scian) * (2*3.14)); //radiany
- float promien = 1.0;
- float wysokosc = 2.0;
- glNormal3d( cos(kat),0,sin(kat) );
- glVertex3d( promien*cos(kat), wysokosc, promien*sin(kat) );
- glVertex3d( promien*cos(kat), 0, promien*sin(kat) ); }
- glEnd();
- glEndList();
- glNewList(Wall2,GL_COMPILE); //trojkaty
- glBegin(GL_TRIANGLES);
- glNormal3d( 0.0, 0.0, 1.0);
- glVertex3d( 0.0, 4.0, 1.0);
- glVertex3d( -1.0, 2.0, 1.0);
- glVertex3d( 1.0, 2.0, 1.0);
- glNormal3d( 0.0, 0.0, -1.0);
- glVertex3d( 0.0, 4.0, -1.0);
- glVertex3d( -1.0, 2.0, -1.0);
- glVertex3d( 1.0, 2.0, -1.0);
- glEnd();
- glEndList();
- glNewList(Wall3,GL_COMPILE);
- glBegin(GL_QUADS);
- glNormal3d( 1.0, 0.0, 0.0);
- glVertex3d( 0.0, 4.0, 1.0);
- glVertex3d( 0.0, 4.0, -1.0);
- glVertex3d( 1.0, 2.0, -1.0);
- glVertex3d( 1.0, 2.0, 1.0);
- glNormal3d( -1.0, 0.0, 0.0);
- glVertex3d( 0.0, 4.0, 1.0);
- glVertex3d( 0.0, 4.0, -1.0);
- glVertex3d( -1.0, 2.0, -1.0);
- glVertex3d( -1.0, 2.0, 1.0);
- glEnd();
- glEndList();
- glNewList(Floor,GL_COMPILE);
- glBegin(GL_POLYGON);
- glNormal3d( 0.0, 1.0, 0.0);
- glVertex3d( -10, -1, -30.0);
- glVertex3d( -10, -1, 10.0);
- glVertex3d( 10, -1, 10.0);
- glVertex3d( 10, -1, -30.0);
- glEnd();
- glEndList();
- }
Add Comment
Please, Sign In to add comment