DrawGLScene.cpp
No notes
Syntax:
C++
#include "SDL_opengl.h" #include "LadujScene.h" extern GLuint tex[]; float x, y, z; int pos; void rysujNiebo(); void rysujZiemie(); void rysujCube(float x, float y, float z); void rysujMurek(float x, float y, float z); void rysujSciane(float x, float y, float z, int Sciana); void rysujPodloge(float x, float y, float z); void fotka_leo(float x, float y, float z); void fotka_me(float x, float y, float z); void DrawGLScene( float xPos, float zPos, float yRot, float walkbias, float lookupdown ) { GLfloat xTrans = -xPos; GLfloat zTrans = -zPos; GLfloat yTrans = -walkbias + -25.0f; GLfloat sceneroty = 360.0f - yRot; glRotatef(lookupdown, 1.0f, 0.0f, 0.0f); glRotatef( sceneroty, 0.0f, 1.0f, 0.0f ); glTranslatef(xTrans, yTrans, zTrans); int i = 0; do { x = Sciana[i].x; y = Sciana[i].y; z = Sciana[i].z; pos = Sciana[i].pos; rysujSciane( x, y, z, pos); i++; } while(i != iloscScian); i = 0; do { x = Podloga[i].x; y = Podloga[i].y; z = Podloga[i].z; rysujPodloge( x, y, z ); i++; } while(i != iloscPodlog); rysujZiemie(); rysujNiebo(); } void rysujSciane(float x, float y, float z, int Sciana) { if( Sciana == PIONOWA ) { for( int i=0; i<=90; i+=10 ) rysujMurek( x+i, y, z ); } else if( Sciana == POZIOMA ) { for( int j=0; j<=90; j+=10 ) rysujMurek( x, y, z+j ); } // for ( int i=0; i<=90; i+=10 ) // for ( int j=0; j<=90; j+=10 ) // rysujMurek( x+i, y, z+j ); } void rysujMurek(float x, float y, float z) { rysujCube(x, -10.0f, z); rysujCube(x, 0.0f, z); rysujCube(x, 10.0f, z); rysujCube(x, 20.0f, z); rysujCube(x, 30.0f, z); rysujCube(x, 40.0f, z); rysujCube(x, 50.0f, z); } void rysujCube(float x, float y, float z) { //int wysokosc = 20; glBindTexture(GL_TEXTURE_2D,tex[1]); glBegin( GL_QUADS ); // FRONT glTexCoord2f(0.0f, 0.0f); glVertex3f( x+10, y+10, z+10 ); // top right glTexCoord2f(1.0f, 0.0f); glVertex3f( x , y+10, z+10 ); // top left glTexCoord2f(1.0f, 1.0f); glVertex3f( x , y, z+10 ); // bottom left glTexCoord2f(0.0f, 1.0f); glVertex3f( x+10, y, z+10 ); // bottom right // BACK glTexCoord2f(0.0f, 0.0f); glVertex3f( x+10, y, z ); // top right glTexCoord2f(1.0f, 0.0f); glVertex3f( x, y, z ); // top left glTexCoord2f(1.0f, 1.0f); glVertex3f( x, y+10, z ); // bottom left glTexCoord2f(0.0f, 1.0f); glVertex3f( x+10, y+10, z ); // bottom right // TOP glTexCoord2f(0.0f, 0.0f); glVertex3f( x+10, y+10, z ); // top right glTexCoord2f(1.0f, 0.0f); glVertex3f( x, y+10, z ); // top left glTexCoord2f(1.0f, 1.0f); glVertex3f( x, y+10, z+10 ); // bottom left glTexCoord2f(0.0f, 1.0f); glVertex3f( x+10, y+10, z+10 ); // bottom right // BOTTOM glTexCoord2f(0.0f, 0.0f); glVertex3f( x, y, z+10 ); // top right glTexCoord2f(1.0f, 0.0f); glVertex3f( x+10, y, z+10 ); // top left glTexCoord2f(1.0f, 1.0f); glVertex3f( x+10, y, z ); // bottom left glTexCoord2f(0.0f, 1.0f); glVertex3f( x, y, z ); // bottom right // LEFT glTexCoord2f(0.0f, 0.0f); glVertex3f( x, y, z+10 ); // top right glTexCoord2f(1.0f, 0.0f); glVertex3f( x, y, z ); // top left glTexCoord2f(1.0f, 1.0f); glVertex3f( x, y+10, z ); // bottom left glTexCoord2f(0.0f, 1.0f); glVertex3f( x, y+10, z+10 ); // bottom right // RIGHT glTexCoord2f(0.0f, 0.0f); glVertex3f( x+10, y+10, z ); // top right glTexCoord2f(1.0f, 0.0f); glVertex3f( x+10, y+10, z+10 ); // top left glTexCoord2f(1.0f, 1.0f); glVertex3f( x+10, y, z+10 ); // bottom left glTexCoord2f(0.0f, 1.0f); glVertex3f( x+10, y, z ); // bottom right glEnd(); } void rysujPodloge(float x, float y, float z) { glBindTexture(GL_TEXTURE_2D,tex[2]); glBegin( GL_QUADS ); glTexCoord2f(0.0f, 0.0f); glVertex3f( x, -10.0f, z ); // top right glTexCoord2f(1.0f, 0.0f); glVertex3f( x-10, -10.0f, z ); // top left glTexCoord2f(1.0f, 1.0f); glVertex3f( x-10, -10.0f, z+10.0f ); // bottom left glTexCoord2f(0.0f, 1.0f); glVertex3f( x, -10.0f, z+10.0f ); // bottom right glEnd(); } //void rysujSufit(float x, float y, float z) //{ // glBindTexture(GL_TEXTURE_2D,tex[3]); // glBegin( GL_QUADS ); // glTexCoord2f(0.0f, 0.0f); glVertex3f( x, 20.0f, z ); // top right // glTexCoord2f(1.0f, 0.0f); glVertex3f( x-20, 20.0f, z ); // top left // glTexCoord2f(1.0f, 1.0f); glVertex3f( x-20, 20.0f, z+20.0f ); // bottom left // glTexCoord2f(0.0f, 1.0f); glVertex3f( x, 20.0f, z+20.0f ); // bottom right // glEnd(); //} void rysujZiemie() { glPushMatrix(); glBindTexture(GL_TEXTURE_2D, tex[3]); glTranslatef( 0.0f, -11.0f, 0.0f ); glBegin(GL_QUADS); glTexCoord2f( 1.0f, 1.0f ); glVertex3f( -1000.0f, 0.0f, 1000.0f ); glTexCoord2f( 50.0f, 1.0f ); glVertex3f( 1000.0f, 0.0f, 1000.0f ); glTexCoord2f( 50.0f, 50.0f ); glVertex3f( 1000.0f, 0.0f, -1000.0f ); glTexCoord2f( 1.0f, 50.0f ); glVertex3f( -1000.0f, 0.0f, -1000.0f ); glEnd(); glPopMatrix(); } void rysujNiebo() { glPushMatrix(); glBindTexture(GL_TEXTURE_2D,tex[6]); glBegin( GL_QUADS ); // TOP glTexCoord2f(0.0f, 0.0f); glVertex3f( -1000.0f, 200.0f, 1000.0f ); // top right glTexCoord2f(1.0f, 0.0f); glVertex3f( 1000.0f, 200.0f, 1000.0f ); // top left glTexCoord2f(1.0f, 1.0f); glVertex3f( 1000.0f, 200.0f, -1000.0f ); // bottom left glTexCoord2f(0.0f, 1.0f); glVertex3f( -1000.0f, 200.0f, -1000.0f ); // bottom right // FRONT glTexCoord2f(0.0f, 0.0f); glVertex3f( -1000.0f, 200.0f, 1000.0f ); // top right glTexCoord2f(1.0f, 0.0f); glVertex3f( 1000.0f, 200.0f, 1000.0f ); // top left glTexCoord2f(1.0f, 1.0f); glVertex3f( 1000.0f, -11.0f, 1000.0f ); // bottom left glTexCoord2f(0.0f, 1.0f); glVertex3f( -1000.0f, -11.0f, 1000.0f ); // bottom right // BACK glTexCoord2f(0.0f, 0.0f); glVertex3f( -1000.0f, 200.0f, -1000.0f ); // top right glTexCoord2f(1.0f, 0.0f); glVertex3f( 1000.0f, 200.0f, -1000.0f ); // top left glTexCoord2f(1.0f, 1.0f); glVertex3f( 1000.0f, -11.0f, -1000.0f ); // bottom left glTexCoord2f(0.0f, 1.0f); glVertex3f( -1000.0f, -11.0f, -1000.0f ); // bottom right // LEFT glTexCoord2f(0.0f, 0.0f); glVertex3f( 1000.0f, 200.0f, 1000.0f ); // top right glTexCoord2f(1.0f, 0.0f); glVertex3f( 1000.0f, 200.0f, -1000.0f ); // top left glTexCoord2f(1.0f, 1.0f); glVertex3f( 1000.0f, -11.0f, -1000.0f ); // bottom left glTexCoord2f(0.0f, 1.0f); glVertex3f( 1000.0f, -11.0f, 1000.0f ); // bottom right // RIGHT glTexCoord2f(0.0f, 0.0f); glVertex3f( -1000.0f, 200.0f, 1000.0f ); // top right glTexCoord2f(1.0f, 0.0f); glVertex3f( -1000.0f, 200.0f, -1000.0f ); // top left glTexCoord2f(1.0f, 1.0f); glVertex3f( -1000.0f, -11.0f, -1000.0f ); // bottom left glTexCoord2f(0.0f, 1.0f); glVertex3f( -1000.0f, -11.0f, 1000.0f ); // bottom right glEnd(); glPopMatrix(); } void fotka_leo(float x, float y, float z) { glPushMatrix(); glLoadIdentity(); glTranslatef( x, y, z ); glBindTexture(GL_TEXTURE_2D,tex[4]); glBegin( GL_QUADS ); glTexCoord2f(0.0f, 0.0f); glVertex3f( 0.5f, -0.5f, 0.0f ); // top right glTexCoord2f(1.0f, 0.0f); glVertex3f( -0.5f, -0.5f, 0.0f ); // top left glTexCoord2f(1.0f, 1.0f); glVertex3f( -0.5f, 0.5f, 0.0f ); // bottom left glTexCoord2f(0.0f, 1.0f); glVertex3f( 0.5f, 0.5f, 0.0f ); // bottom right glEnd(); glPopMatrix(); } void fotka_me(float x, float y, float z) { glPushMatrix(); glLoadIdentity(); glTranslatef( x, y, z ); glBindTexture(GL_TEXTURE_2D,tex[5]); glBegin( GL_QUADS ); glTexCoord2f(0.0f, 0.0f); glVertex3f( 0.5f, -0.5f, 0.0f ); // top right glTexCoord2f(1.0f, 0.0f); glVertex3f( -0.5f, -0.5f, 0.0f ); // top left glTexCoord2f(1.0f, 1.0f); glVertex3f( -0.5f, 0.5f, 0.0f ); // bottom left glTexCoord2f(0.0f, 1.0f); glVertex3f( 0.5f, 0.5f, 0.0f ); // bottom right glEnd(); glPopMatrix(); }