Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- // stała do obsługi menu podręcznego
- enum
- {
- EXIT // wyjście
- };
- GLuint texture[5];
- AUX_RGBImageRec *LoadBMP(char* filename)
- {
- FILE* file = NULL;
- if(!filename)
- {
- return NULL;
- }
- file = fopen(filename, "r");
- if(file)
- {
- fclose(file);
- return auxDIBImageLoad(filename);
- }
- return NULL;
- }
- int LoadGLTextures()
- {
- int status = false;
- AUX_RGBImageRec *TextureImage[5];
- memset(TextureImage, 0, sizeof(void *)*1);
- if(TextureImage[0] = LoadBMP("crate.bmp"))
- {
- status = true;
- glGenTextures(1, &texture[0]);
- glBindTexture(GL_TEXTURE_2D, texture[0]);
- gluBuild2DMipmaps(GL_TEXTURE_2D, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);
- glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- }
- if(TextureImage[1] = LoadBMP("metal.bmp"))
- {
- status = true;
- glGenTextures(1, &texture[1]);
- glBindTexture(GL_TEXTURE_2D, texture[1]);
- gluBuild2DMipmaps(GL_TEXTURE_2D, 3, TextureImage[1]->sizeX, TextureImage[1]->sizeY, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[1]->data);
- glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- }
- if(TextureImage[2] = LoadBMP("obraz.bmp"))
- {
- status = true;
- glGenTextures(1, &texture[2]);
- glBindTexture(GL_TEXTURE_2D, texture[2]);
- gluBuild2DMipmaps(GL_TEXTURE_2D, 3, TextureImage[2]->sizeX, TextureImage[2]->sizeY, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[2]->data);
- glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- }
- if(TextureImage[3] = LoadBMP("wall.bmp"))
- {
- status = true;
- glGenTextures(1, &texture[3]);
- glBindTexture(GL_TEXTURE_2D, texture[3]);
- gluBuild2DMipmaps(GL_TEXTURE_2D, 3, TextureImage[3]->sizeX, TextureImage[3]->sizeY, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[3]->data);
- glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- }
- if(TextureImage[4] = LoadBMP("wood.bmp"))
- {
- status = true;
- glGenTextures(1, &texture[4]);
- glBindTexture(GL_TEXTURE_2D, texture[4]);
- gluBuild2DMipmaps(GL_TEXTURE_2D, 3, TextureImage[4]->sizeX, TextureImage[4]->sizeY, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[4]->data);
- glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- }
- if(TextureImage[0])
- {
- if(TextureImage[0]->data)
- {
- free(TextureImage[0]->data);
- }
- free(TextureImage[0]);
- }
- return status;
- }
- double PredkoscKamery=0;
- // pionowy kąt pola widzenia
- GLdouble fovy = 60;
- float czajnikrot=0;
- // wpółrzędne położenia obserwatora
- GLdouble eyex = 0;
- GLdouble eyey = 0;
- GLdouble eyez = 3;
- GLdouble ObrotX=3.14/2.0;
- GLdouble ObrotY=0;
- bool KeyUP=false;
- bool KeyDOWN=false;
- bool KeyRIGHT=false;
- bool KeyLEFT=false;
- // współrzędne punktu w którego kierunku jest zwrócony obserwator,
- GLdouble centerx = 0;
- GLdouble centery = 0;
- GLdouble centerz = -100;
- int figure=0;
- float kat=0;
- GLuint idlisty;
- // funkcja generująca scenę 3D
- void GenerujListyWyswietlania()
- {
- idlisty = glGenLists( 4 );
- // utworzenie pierwszej listy
- glNewList( idlisty + 0, GL_COMPILE );
- glTranslatef(0,0,10);
- glutWireCube(1);
- glEndList();
- // utworzenie drugiej listy
- glNewList( idlisty + 1, GL_COMPILE );
- glTranslatef(0,0,8);
- glutSolidTeapot(1);
- //glTranslatef(0,0,10);
- //glutSolidTeapot(1);
- //glTranslatef(0,0,10);
- //glutSolidTeapot(1);
- glEndList();
- // utworzenie trzeciej listy
- glNewList( idlisty + 2, GL_COMPILE );
- glTranslatef(0,0,10);
- LoadGLTextures();
- glEnable(GL_TEXTURE_2D);
- float length = 10;
- glPushMatrix();
- glRotatef(90,0,1,0);
- glScalef(length,1,1);
- glBindTexture(GL_TEXTURE_2D, texture[0]);
- glBegin(GL_QUADS);
- // Front face
- glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
- glTexCoord2f(10.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
- glTexCoord2f(10.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f);
- glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
- // Back face
- glTexCoord2f(10.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
- glTexCoord2f(10.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);
- glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);
- glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
- glEnd();
- glBindTexture(GL_TEXTURE_2D, texture[1]);
- glBegin(GL_QUADS);
- // Top face
- glTexCoord2f(10.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);
- glTexCoord2f(10.0f, 0.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
- glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, 1.0f, 1.0f);
- glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);
- glEnd();
- glBindTexture(GL_TEXTURE_2D, texture[2]);
- glBegin(GL_QUADS);
- // Bottom face
- glTexCoord2f(10.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
- glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
- glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
- glTexCoord2f(10.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
- //ok
- glEnd();
- glPopMatrix();
- glPushMatrix();
- glScalef(length,1,1);
- glTranslatef(0,0,11.0f);
- glBindTexture(GL_TEXTURE_2D, texture[0]);
- glBegin(GL_QUADS);
- // Front face
- glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
- glTexCoord2f(10.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
- glTexCoord2f(10.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f);
- glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
- // Back face
- glTexCoord2f(10.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
- glTexCoord2f(10.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);
- glTexCoord2f(0.0f, 1.0f); glVertex3f( -0.1f, 1.0f, -1.0f);
- glTexCoord2f(0.0f, 0.0f); glVertex3f( -0.1f, -1.0f, -1.0f);
- glEnd();
- glBegin(GL_QUADS);
- glTexCoord2f(10.0f, 0.0f); glVertex3f( 0.1f, -1.0f, -1.0f);
- glTexCoord2f(10.0f, 1.0f); glVertex3f( 0.1f, 1.0f, -1.0f);
- glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);
- glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
- glEnd();
- glBindTexture(GL_TEXTURE_2D, texture[1]);
- glBegin(GL_QUADS);
- // Top face
- glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);
- glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
- glTexCoord2f(10.0f, 0.0f); glVertex3f( 1.0f, 1.0f, 1.0f);
- glTexCoord2f(10.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);
- glEnd();
- glBindTexture(GL_TEXTURE_2D, texture[2]);
- glBegin(GL_QUADS);
- // Bottom face
- glTexCoord2f(10.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
- glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
- glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
- glTexCoord2f(10.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
- glEnd();
- glPopMatrix();
- glPushMatrix();
- ////////////////////////////////
- glRotatef(90,0,1,0);
- glTranslatef(-20.0f,0,11.0f);
- glScalef(length,1,1);
- glBindTexture(GL_TEXTURE_2D, texture[0]);
- glBegin(GL_QUADS);
- glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
- glTexCoord2f(10.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
- glTexCoord2f(10.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f);
- glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
- glEnd();
- glBegin(GL_QUADS);
- // Back face
- glTexCoord2f(10.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
- glTexCoord2f(10.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);
- glTexCoord2f(0.0f, 1.0f); glVertex3f( 0.8f, 1.0f, -1.0f);
- glTexCoord2f(0.0f, 0.0f); glVertex3f( 0.8f, -1.0f, -1.0f);
- glEnd();
- glBindTexture(GL_TEXTURE_2D, texture[1]);
- glBegin(GL_QUADS);
- // Top face
- glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);
- glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
- glTexCoord2f(10.0f, 0.0f); glVertex3f( 1.0f, 1.0f, 1.0f);
- glTexCoord2f(10.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);
- glEnd();
- glBindTexture(GL_TEXTURE_2D, texture[2]);
- glBegin(GL_QUADS);
- // Bottom face
- glTexCoord2f(10.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
- glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
- glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
- glTexCoord2f(10.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
- glEnd();
- glBindTexture(GL_TEXTURE_2D, texture[0]);
- glBegin(GL_QUADS);
- // Right face
- glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
- glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);
- glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f);
- glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
- glEnd();
- glPopMatrix();
- glPushMatrix();
- glRotatef(90,0,1,0);
- glTranslatef(-20.0f,0,-11.0f);
- glScalef(length,1,1);
- glBindTexture(GL_TEXTURE_2D, texture[0]);
- glBegin(GL_QUADS);
- glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
- glTexCoord2f(10.0f, 0.0f); glVertex3f( 0.8f, -1.0f, 1.0f);
- glTexCoord2f(10.0f, 1.0f); glVertex3f( 0.8f, 1.0f, 1.0f);
- glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
- // Back face
- glTexCoord2f(10.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
- glTexCoord2f(10.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);
- glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);
- glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
- glEnd();
- glBindTexture(GL_TEXTURE_2D, texture[1]);
- glBegin(GL_QUADS);
- // Top face
- glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);
- glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
- glTexCoord2f(10.0f, 0.0f); glVertex3f( 1.0f, 1.0f, 1.0f);
- glTexCoord2f(10.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);
- glEnd();
- glBindTexture(GL_TEXTURE_2D, texture[2]);
- glBegin(GL_QUADS);
- // Bottom face
- glTexCoord2f(10.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
- glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
- glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
- glTexCoord2f(10.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
- glEnd();
- glBindTexture(GL_TEXTURE_2D, texture[0]);
- glBegin(GL_QUADS);
- // Right face
- glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
- glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);
- glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f);
- glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
- glEnd();
- glPopMatrix();
- glEndList();
- }
- void UstawKamere()
- {
- double cosx, siny, sinx;
- double CelX, CelY, CelZ;
- // wartości funkcji trygonometrycznych
- // obliczamy tylko raz dla oszczędności
- if (KeyDOWN) PredkoscKamery=-0.1;
- if (KeyUP) PredkoscKamery=0.1;
- if (KeyLEFT) ObrotX-=0.1;
- if (KeyRIGHT) ObrotX+=0.1;
- siny = sin(ObrotY);
- cosx = cos(ObrotX);
- sinx = sin(ObrotX);
- // nowa pozycja kamery
- eyex += cosx*PredkoscKamery;
- eyey += siny*PredkoscKamery;
- eyez += sinx*PredkoscKamery;
- // punkt wycelowania kamery powinien
- // znajdować się gdzieś "przed jej nosem"
- CelX = eyex+cosx;
- CelY = eyey+siny;
- CelZ = eyez+sinx;
- gluLookAt(eyex, eyey, eyez,CelX, CelY, CelZ, 0, 1, 0);
- //gluLookAt( eyex, eyey, eyez, centerx, centery, centerz, 0, 1, 0 );
- PredkoscKamery=0;
- }
- void Display()
- {
- // kolor tła - zawartość bufora koloru
- glClearColor( 1.0, 0.0, 1.0, 1.0 );
- glEnable(GL_DEPTH_TEST);
- // czyszczenie bufora koloru
- glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
- // wybór macierzy modelowania
- glMatrixMode( GL_MODELVIEW );
- // macierz modelowania = macierz jednostkowa
- glLoadIdentity();
- UstawKamere();
- // ustawienie obserwatora
- //glRotatef(kat,1,0,0);
- // przesunięcie obiektu o wektor [0,0,-3]
- //glTranslatef( 0, 0, 2.0 );
- // kolor krawędzi sześcianu
- glColor3f( 0.5, 1.0, 0.5 );
- /*glEnable(GL_LIGHTING);
- GLfloat ambientlight[]={1.0, 1.0, 1.0, 1.0};
- glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambientlight);
- GLfloat gray[] = {0.75, 0.75, 0.75, 1.0};
- glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, gray);*/
- glEnable(GL_COLOR_MATERIAL);
- glEnable(GL_LIGHTING);
- glEnable(GL_LIGHT0);
- glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
- glNormal3f(0.0, -1.0, 0.0);
- glEnable(GL_NORMALIZE);
- GLfloat DiffuseLight1[]={1.0,1.0,1.0,1.0};
- GLfloat LightPosition1[]={0.0, 100.0, -100.0, 1.0};
- GLfloat AmbientLight[]={0.1, 0.1, 0.1, 1.0};
- glLightfv( GL_LIGHT0, GL_DIFFUSE, DiffuseLight1 );
- glLightfv( GL_LIGHT0, GL_POSITION, LightPosition1 );
- glLightfv( GL_LIGHT0, GL_AMBIENT, AmbientLight );
- GLfloat specular[]={1.0,1.0,1.0,1.0};
- glLightfv( GL_LIGHT0, GL_SPECULAR, specular );
- GLfloat specref[]={1.0,1.0,1.0,1.0};
- glMaterialfv(GL_FRONT, GL_SPECULAR, specref);
- glMateriali(GL_FRONT, GL_SHININESS, 128);
- // glutWireCube(1);
- switch (figure)
- {
- case 1:
- glCallList(idlisty+0);
- break;
- case 2:
- glCallList(idlisty+1);
- break;
- case 3:
- glCallList(idlisty+2);
- break;
- }
- // skierowanie poleceń do wykonania
- glFlush();
- // zamiana buforów koloru
- glutSwapBuffers();
- }
- // zmiana wielkości okna
- void Reshape( int width, int height )
- {
- // obszar renderingu - całe okno
- glViewport( 0, 0, width, height );
- // wybór macierzy rzutowania
- glMatrixMode( GL_PROJECTION );
- // macierz rzutowania = macierz jednostkowa
- glLoadIdentity();
- // obliczenie aspektu obrazu z uwzględnieniem
- // przypadku, gdy wysokość obrazu wynosi 0
- GLdouble aspect = 1;
- if( height > 0 )
- aspect = width /( GLdouble ) height;
- // rzutowanie perspektywiczne
- gluPerspective( fovy, aspect, 0.01, 100.0 );
- // generowanie sceny 3D
- Display();
- }
- // obsługa klawiatury
- void Klawisze( unsigned char key, int x, int y )
- {
- // klawisz +
- if( key == '+' && fovy < 180 )
- fovy++;
- // klawisz -
- if( key == '-' && fovy > 0 )
- fovy--;
- if( key == 'a' && fovy > 0 )
- kat++;
- if( key == 'w' )
- PredkoscKamery=0.02;
- if( key == 's' )
- PredkoscKamery=-0.02;
- if( key == 'e' )
- ObrotX+=0.02;
- if( key == 'q' )
- ObrotX-=0.02;
- if( key == 'r' )
- ObrotY+=0.02;
- if( key == 'f' )
- ObrotY-=0.02;
- // odrysowanie okna
- Reshape( glutGet( GLUT_WINDOW_WIDTH ), glutGet( GLUT_WINDOW_HEIGHT ) );
- }
- void KlawiszeSpecjalne( int key, int x, int y )
- {
- switch( key )
- {
- // kursor w lewo
- case GLUT_KEY_LEFT:
- eyex += 0.1;
- break;
- // kursor w górę
- case GLUT_KEY_UP:
- eyey -= 0.1;
- break;
- // kursor w prawo
- case GLUT_KEY_RIGHT:
- eyex -= 0.1;
- break;
- // kursor w dół
- case GLUT_KEY_DOWN:
- eyey += 0.1;
- break;
- }
- // odrysowanie okna
- Reshape( glutGet( GLUT_WINDOW_WIDTH ), glutGet( GLUT_WINDOW_HEIGHT ) );
- }
- // obsługa menu podręcznego
- void Menu( int value )
- {
- switch( value )
- {
- // wyjście
- case EXIT:
- exit( 0 );
- // wyjście
- case 1:
- figure=1;
- break;
- case 2:
- figure=2;
- break;
- case 3:
- figure=3;
- break;
- }
- Reshape( glutGet( GLUT_WINDOW_WIDTH ), glutGet( GLUT_WINDOW_HEIGHT ) );
- }
- void KeyDown(int key,int x,int y)
- {
- switch(key){
- case GLUT_KEY_UP:
- KeyUP=true;
- break;
- case GLUT_KEY_DOWN:
- KeyDOWN=true;
- break;
- case GLUT_KEY_LEFT:
- KeyLEFT=true;
- break;
- case GLUT_KEY_RIGHT:
- KeyRIGHT=true;
- break;
- }
- }
- void KeyUp(int key,int x,int y)
- {
- switch(key)
- {
- case GLUT_KEY_UP:
- KeyUP=false;
- break;
- case GLUT_KEY_DOWN:
- KeyDOWN=false;
- break;
- case GLUT_KEY_LEFT:
- KeyLEFT=false;
- break;
- case GLUT_KEY_RIGHT:
- KeyRIGHT=false;
- break;
- }
- }
- int main( int argc, char * argv[] )
- {
- // inicjalizacja biblioteki GLUT
- glutInit( & argc, argv );
- // inicjalizacja bufora ramki
- glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH );
- // rozmiary głównego okna programu
- glutInitWindowSize( 400, 400 );
- // utworzenie głównego okna programu
- #ifdef WIN32
- glutCreateWindow( "Sześcian 3" );
- #else
- glutCreateWindow( "Szescian 3" );
- #endif
- // dołączenie funkcji generującej scenę 3D
- glutDisplayFunc( Display );
- // dołączenie funkcji wywoływanej przy zmianie rozmiaru okna
- glutReshapeFunc( Reshape );
- // dołączenie funkcji obsługi klawiatury
- glutKeyboardFunc( Klawisze );
- // dołączenie funkcji obsługi klawiszy funkcyjnych i klawiszy kursora
- // glutSpecialFunc( KlawiszeSpecjalne );
- glutSpecialFunc(KeyDown);
- glutSpecialUpFunc(KeyUp);
- // utworzenie menu podręcznego
- glutCreateMenu( Menu );
- // dodanie pozycji do menu podręcznego
- glutAddMenuEntry( "Wyjście", EXIT );
- glutAddMenuEntry( "Rys1", 1 );
- glutAddMenuEntry( "Rys2", 2 );
- glutAddMenuEntry( "Rys3", 3 );
- // określenie przycisku myszki obsługującej menu podręczne
- glutAttachMenu( GLUT_RIGHT_BUTTON );
- GenerujListyWyswietlania();
- glutIdleFunc(Display);
- // wprowadzenie programu do obsługi pętli komunikatów
- glutMainLoop();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement