Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifdef WIN32
- #include <windows.h>
- #endif
- #include <math.h>
- #include <stdlib.h>
- #include <stdio.h>
- #include <GL/gl.h>
- #include <GL/glu.h>
- #include "render.h"
- #include "bitmap.h"
- #define BLACHA_RDZA 10
- #define BLACHA_CZARNA 11
- #define BLACHA_GRAFIKA 12
- extern int iMx,iMy;
- extern float X,Y,Z;
- extern float g_counter;
- void Asix(void); //funkcja rysujaca osie ukladu wspolrzednych
- unsigned int Texture[10]; /* tablica indeksow uzywanych tekstur */
- void tworz_listy_wysw();
- /*zmiana rozmiaru okna */
- void resizeGLScene(unsigned int width, unsigned int height)
- {
- if (height == 0) /* zabezpiecznie gdyby wysokosc okna byla mniejsza od 1 */
- height = 1;
- 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)
- {
- GLfloat fogColor[] = { 0.1f, 0.3f, 0.7f, 1.0f }; /* kolor mgly */
- Texture[0]=loadTextures("Data/grass.bmp");
- Texture[1]=loadTextures("Data/glass.bmp");
- Texture[2]=loadTextures("Data/glass.bmp");
- Texture[3]=loadTextures("Data/KluczaTrzon.bmp");
- Texture[4]=loadTextures("Data/drewie.bmp");
- Texture[5]=loadTextures("Data/a.bmp");
- Texture[6]=loadTextures("Data/b.bmp");
- Texture[7]=loadTextures("Data/metalblack03.bmp");
- Texture[8]=loadTextures("Data/tongue.bmp");
- tworz_listy_wysw();
- glEnable(GL_TEXTURE_2D); /* zezwolenie na wyswietlanie tekstur */
- glShadeModel(GL_SMOOTH);
- glClearColor(0.1f, 0.3f, 0.7f, 0.0f); // niebieskie tlo
- //glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // czarne tlo
- glClearDepth(1.0f);
- glEnable(GL_DEPTH_TEST);
- glDepthFunc(GL_LEQUAL);
- glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
- // glBlendFunc(GL_SRC_ALPHA, GL_ONE); /* okreslenie funkcji przezroczystosci */
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); /* okreslenie funkcji przezroczystosci */
- glEnable(GL_ALPHA_TEST);
- glAlphaFunc(GL_GREATER,0.5);
- glFogi(GL_FOG_MODE, GL_LINEAR);
- glFogfv(GL_FOG_COLOR, fogColor);
- glFogf(GL_FOG_START, 400.0f);
- glFogf(GL_FOG_END, 500.0f);
- glEnable(GL_FOG);
- // Wlaczenie oswietlenie, niestety znika przy tym przezroczystosc i
- // jakies oswietlenie standardowe:
- glEnable(GL_LIGHTING);
- return 1;
- }
- /* Renderowanie sceny */
- int drawGLScene(void)
- {
- GLfloat BlueSurface[] = { 0.0f, 0.0f, 0.4f, 1.0f};
- GLfloat GreySurface[] = { 0.7f, 0.7f, 0.7f, 1.0f};
- GLfloat LightAmbient[] = { 100.0f, 50.0f, 20.0f, 0.5f };
- GLfloat LightDiffuse[] = { 10.0f, 0.8f, 0.8f, 0.8f };
- GLfloat LightPosition[] = { 0.0f, 1.0f, -5.0f, 1.0f };
- GLfloat SpotDirection[] = {sin(g_counter/180*3.14),0,cos(g_counter/180*3.14)};
- glLightfv(GL_LIGHT0, GL_AMBIENT, LightAmbient); //1 składowa: światło otaczające (bezkierunkowe)
- glLightfv(GL_LIGHT0, GL_DIFFUSE, LightDiffuse); //2 składowa: światło rozproszone (kierunkowe)
- glLightfv(GL_LIGHT0, GL_POSITION, LightPosition);
- glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, 70.0f);
- glLightf(GL_LIGHT0, GL_SPOT_EXPONENT, 120.0f);
- glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, SpotDirection);
- glEnable(GL_LIGHT0);
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- glLoadIdentity();
- //glBindTexture(GL_TEXTURE_2D,0); /* select our texture */
- //glTranslatef(0,0,-3);
- //glColor3f(0.5,1,0.5);
- //glRasterPos2f(-1,1);
- //glPrint("OpenGL w systemie Linux");
- glTranslatef(X,Y,Z-50);
- // obracanie calej sceny
- glRotatef(iMy+90,1,0,0);
- glRotatef(iMx,0,1,0);
- //zerowanie kolorow i tekstor w celu rysowania obiektow nieteksturowanych
- glColor4f(1,1,1,1);
- Asix(); // rysunek ukladu wspolrzednych
- glEnable(GL_BLEND);
- glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
- glPushMatrix();
- glColor4f(1,1,1,1);
- glBindTexture(GL_TEXTURE_2D, Texture[0]);
- // rysowanie podloza sceny
- glBegin(GL_QUADS);
- glTexCoord2f(0, 0); glVertex3f(-100,0,-100);
- glTexCoord2f(0, 4); glVertex3f(-100,0,100);
- glTexCoord2f(4, 4); glVertex3f(100,0,100);
- glTexCoord2f(4, 0); glVertex3f(100,0,-100);
- glEnd();
- //glDisable(GL_DEPTH_TEST);
- //glDisable(GL_CULL_FACE);
- glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); // Pozwala oswietlac textury
- //glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_BLEND); // Pozwala oswietlac textury -swiatlo duzo mocniejsze
- glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_ADD);
- //glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE);
- // rysowanie plytek o roznej przezroczystosci:
- glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, BlueSurface);
- int moje[9][10] = {
- { 1,1,1,1,1,1,1,1,1,1 },
- { 1,0,0,0,0,0,0,0,0,1 },
- { 1,0,1,1,1,1,1,1,0,1 },
- { 1,0,0,0,0,0,0,1,0,1 },
- { 1,1,1,1,1,1,0,1,0,1 },
- { 1,0,0,0,0,0,0,1,0,1 },
- { 1,0,1,1,1,1,1,1,0,1 },
- { 1,0,0,0,0,0,0,1,0,1 },
- { 1,1,1,1,1,1,0,1,0,1 } };
- for (int i = 0; i <9 ; i++) {
- for (int j = 0; j < 10; j++) {
- if (moje[i][j]==1) {
- {
- glPushMatrix();
- int x = -8 + i * 2, z = 2*j;
- glColor4f(1.0f, 1.0f, 1.0f, 0.55 + i * 0.05f);
- glScalef(5.0f, 5.0f, 5.0f);
- glTranslatef(x, 1.0f, z);
- glBindTexture(GL_TEXTURE_2D, Texture[5]);
- glCallList(BLACHA_RDZA);
- glBindTexture(GL_TEXTURE_2D, Texture[7]);
- glCallList(BLACHA_CZARNA);
- glBindTexture(GL_TEXTURE_2D, Texture[6]);
- glCallList(BLACHA_GRAFIKA);
- glPopMatrix();
- }
- }
- }
- }
- glPopMatrix();
- glPushMatrix();
- glTranslatef(5.0f,0.0f,5);
- //glDepthMask(0); // zabronienie zapisu do Z-bufora
- glColor4f(1,1,1,0.7);
- // RENDER OBJECT
- //glBindTexture(GL_TEXTURE_2D,Texture[3]);
- //glDisable(GL_TEXTURE_2D);
- glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); // Pozwala oswietlac textury
- GLUquadricObj *Qcyl = gluNewQuadric();
- GLUquadricObj *Qdisk = gluNewQuadric();
- gluDisk(Qdisk,0,5,15,7);
- gluCylinder(Qcyl,5,5,2,15,14);
- gluDeleteQuadric(Qcyl);gluDeleteQuadric(Qdisk);
- glDepthMask(1); //zezwoleniena zapis do Z-bufora
- //glEnable(GL_DEPTH_TEST);
- //glEnable(GL_CULL_FACE);
- glEnable(GL_TEXTURE_2D);
- // Rysowanie sfery z nalozona tekstura
- glTranslatef(10.0f,3.0f,5.0f);
- // d owi a z ani e wy b rane j t e k s t u r y
- glBindTexture(GL_TEXTURE_2D, Texture[5] ) ;
- // u s t awi e n i e parametów s r o d owi s k a t e k s t u r
- glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_REPLACE) ;
- // u two r z eni e kwadr y k i
- GLUquadricObj *quadobj = gluNewQuadric();
- // s t y l ( wyg lad ) g ene rowane j kwadr y k i
- gluQuadricDrawStyle( quadobj ,GLU_FILL ) ;
- // s p o s ó b g e n e r a c j i wektorów normalnych
- gluQuadricNormals ( quadobj ,GLU_SMOOTH) ;
- // n a ł o z e n i e t e k s t u r y na kwadryke
- gluQuadricTexture ( quadobj ,GL_TRUE) ;
- // narysowani e k u l i
- gluSphere ( quadobj , 2.0 , 50 , 50 ) ;
- // u s u n i e c i e kwa dr y k i
- gluDeleteQuadric ( quadobj ) ;
- glDisable(GL_BLEND);
- glPopMatrix();
- glFlush();
- return 1;
- }
- void Asix(void)
- {
- glColor3f(1,0,0);
- glBegin(GL_LINES);
- glVertex3f(0,0,0);
- glVertex3f(2,0,0);
- glVertex3f(2,-0.25,0.25);
- glVertex3f(2,0.25,-0.25);
- glVertex3f(2,-0.25,-0.25);
- glVertex3f(2,0.25,0.25);
- glEnd();
- glColor3f(0,1,0);
- glBegin(GL_LINES);
- glVertex3f(0,0,0);
- glVertex3f(0,2,0);
- glVertex3f(0,2,0);
- glVertex3f(0.25,2,0);
- glVertex3f(0,2,0);
- glVertex3f(-0.25,2,0.25);
- glVertex3f(0,2,0);
- glVertex3f(-0.25,2,-0.25);
- glEnd();
- glColor3f(0,0,1);
- glBegin(GL_LINES);
- glVertex3f(0,0,0);
- glVertex3f(0,0,2);
- glVertex3f(-0.25,-0.25,2);
- glVertex3f(0.25,0.25,2);
- glVertex3f(-0.25,-0.25,2);
- glVertex3f(0.25,-0.25,2);
- glVertex3f(-0.25,0.25,2);
- glVertex3f(0.25,0.25,2);
- glEnd();
- glColor3f(1,1,1);
- }
- void tworz_listy_wysw()
- {
- // Kawalek blachy stalowej obustronnie przycietej z apokryfem
- float Wierz[8][3] =
- {
- {-1.0f,-1.0f,1.0f},
- {1.0f,-1.0f,1.0f},
- {1.0f,1.0f,1.0f},
- {-1.0f,1.0f,1.0f},
- {-1.0f,-1.0f,-1.0f},
- {1.0f,-1.0f,-1.0f},
- {1.0f,1.0f,-1.0f},
- {-1.0f,1.0f,-1.0f}
- };
- float TexCord[4][2] =
- {
- {0.0f,0.0f}, {1.0f,0.0f}, {1.0f,1.0f}, {0.0f,1.0f}
- };
- int Sciany[6][4] =
- {
- {0,1,2,3}, //przod
- {1,5,6,2}, //prawa
- {4,0,3,7}, //lewa
- {3,2,6,7}, //gora
- {4,5,1,0}, //dol
- {5,4,7,6} // tyl
- };
- glNewList(BLACHA_RDZA,GL_COMPILE);
- for (int j=0;j<3;j++) // j-indeks sciany, i-indeks wierzcholka
- {
- glBegin(GL_QUADS);
- for (int i=0;i<4;i++)
- {
- glTexCoord2fv(TexCord[i]);
- glVertex3fv(Wierz[Sciany[j][i]]);
- }
- glEnd();
- }
- glEndList();
- glNewList(BLACHA_CZARNA,GL_COMPILE);
- for (int j=3;j<5;j++) // j-indeks sciany, i-indeks wierzcholka
- {
- glBegin(GL_QUADS);
- for (int i=0;i<4;i++)
- {
- glTexCoord2fv(TexCord[i]);
- glVertex3fv(Wierz[Sciany[j][i]]);
- }
- glEnd();
- }
- glEndList();
- glNewList(BLACHA_GRAFIKA,GL_COMPILE);
- glBegin(GL_QUADS);
- for (int i=0;i<4;i++)
- {
- glTexCoord2fv(TexCord[i]);
- glVertex3fv(Wierz[Sciany[5][i]]);
- }
- glEnd();
- glEndList();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement