nextt1994 Temat założony przez niniejszego użytkownika |
[OpenGL] Jak podzielić kod programu na 2 pliki ? » 2013-03-17 14:18:18 Nie wiem jak to zrobić, chciałbym przenieść jedną z funkcji w której buduje sobie mapke bo to za dużo kodu jest by tak w głównym pliku to było. Może ktoś pomóc. a Oto Kod Programu (Chodzi mi o funkcje "mapa_a" by ja w inny plik wrzucić. #include <windows.h> #define GLUT_DISABLE_ATEXIT_HACK #include <gl/glut.h> #include <gl/SOIL.h> #include <gl/glu.h> #include <gl/gl.h> #include <stdlib.h> #include <math.h> float xpos = 175, ypos = - 25, zpos = 225, xrot = 0, yrot = 0, angle = 0.0, mx1 =- 400, my1 =- 800; float step = 0.08, step2 =- 0.03, step3 = 0.03; float xx = 0, yy = 0, zz = 0; GLuint texture[ 10 ];
int LoadGLTextures() { texture[ 1 ] = SOIL_load_OGL_texture( "podloga.bmp", SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_INVERT_Y ); if( texture[ 1 ] == 0 ) return false; texture[ 2 ] = SOIL_load_OGL_texture( "tekstura.bmp", SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_INVERT_Y ); if( texture[ 2 ] == 0 ) return false; texture[ 3 ] = SOIL_load_OGL_texture( "tekstura2.bmp", SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_INVERT_Y ); if( texture[ 3 ] == 0 ) return false; texture[ 4 ] = SOIL_load_OGL_texture( "tekstura3.bmp", SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_INVERT_Y ); if( texture[ 4 ] == 0 ) return false; texture[ 5 ] = SOIL_load_OGL_texture( "tekstura4.bmp", SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_INVERT_Y ); if( texture[ 5 ] == 0 ) return false; texture[ 6 ] = SOIL_load_OGL_texture( "niebo2.bmp", SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_INVERT_Y ); if( texture[ 6 ] == 0 ) return false; texture[ 7 ] = SOIL_load_OGL_texture( "tekstura10.bmp", SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_INVERT_Y ); if( texture[ 7 ] == 0 ) return false; texture[ 8 ] = SOIL_load_OGL_texture( "obrazek5.bmp", SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_INVERT_Y ); if( texture[ 8 ] == 0 ) return false; texture[ 9 ] = SOIL_load_OGL_texture( "obrazek6.bmp", SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_INVERT_Y ); if( texture[ 9 ] == 0 ) return false; texture[ 9 ] = SOIL_load_OGL_texture( "tekstura10.bmp", SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_INVERT_Y ); if( texture[ 9 ] == 0 ) return false; glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); return true; }
void ruch_myszka( int mx, int my ) { xrot = my + my1; yrot = mx + mx1; mx = mx1; my = my1; } void animacja( int val ) { angle += step; xx += step; yy -= step2; zz += step3; if( xx + 10 >= 30 ) step *=- 1; if( xx - 10 <=- 30 ) step *=- 1; if( yy + 10 >= 30 ) step2 *=- 1; if( yy - 10 <=- 30 ) step2 *=- 1; if( zz + 10 >= 30 ) step3 *=- 1; if( zz - 10 <=- 30 ) step3 *=- 1; if( angle > 360.0f ) angle = 0.0; glutPostRedisplay(); }
void kamera( void ) { glRotatef( xrot, 1.0, 0.0, 0.0 ); glRotatef( yrot, 0.0, 1.0, 0.0 ); glTranslated( - xpos, - ypos, - zpos ); } void mapa_a( void ) { glBindTexture( GL_TEXTURE_2D, texture[ 7 ] ); glBegin( GL_QUADS ); glTexCoord2f( 1.0f, 0.0f ); glVertex3d( 360, - 30, 300 ); glTexCoord2f( 0.0f, 0.0f ); glVertex3d( 360, - 30, 340 ); glTexCoord2f( 0.0f, 1.0f ); glVertex3d( 360, 10, 340 ); glTexCoord2f( 1.0f, 1.0f ); glVertex3d( 360, 10, 300 ); glEnd(); glBegin( GL_QUADS ); glTexCoord2f( 1.0f, 0.0f ); glVertex3d( 320, - 30, 300 ); glTexCoord2f( 0.0f, 0.0f ); glVertex3d( 320, - 30, 340 ); glTexCoord2f( 0.0f, 1.0f ); glVertex3d( 320, 10, 340 ); glTexCoord2f( 1.0f, 1.0f ); glVertex3d( 320, 10, 300 ); glEnd(); glBegin( GL_QUADS ); glTexCoord2f( 1.0f, 0.0f ); glVertex3d( 360, - 30, 340 ); glTexCoord2f( 0.0f, 0.0f ); glVertex3d( 320, - 30, 340 ); glTexCoord2f( 0.0f, 1.0f ); glVertex3d( 320, 10, 340 ); glTexCoord2f( 1.0f, 1.0f ); glVertex3d( 360, 10, 340 ); glEnd(); glBegin( GL_QUADS ); glTexCoord2f( 1.0f, 0.0f ); glVertex3d( 360, - 30, 300 ); glTexCoord2f( 0.0f, 0.0f ); glVertex3d( 320, - 30, 300 ); glTexCoord2f( 0.0f, 1.0f ); glVertex3d( 320, 10, 300 ); glTexCoord2f( 1.0f, 1.0f ); glVertex3d( 360, 10, 300 ); glEnd(); glBindTexture( GL_TEXTURE_2D, texture[ 7 ] ); glBegin( GL_QUADS ); glTexCoord2f( 1.0f, 0.0f ); glVertex3d( 360, - 30, 200 ); glTexCoord2f( 0.0f, 0.0f ); glVertex3d( 360, - 30, 240 ); glTexCoord2f( 0.0f, 1.0f ); glVertex3d( 360, 10, 240 ); glTexCoord2f( 1.0f, 1.0f ); glVertex3d( 360, 10, 200 ); glEnd(); glBegin( GL_QUADS ); glTexCoord2f( 1.0f, 0.0f ); glVertex3d( 320, - 30, 200 ); glTexCoord2f( 0.0f, 0.0f ); glVertex3d( 320, - 30, 240 ); glTexCoord2f( 0.0f, 1.0f ); glVertex3d( 320, 10, 240 ); glTexCoord2f( 1.0f, 1.0f ); glVertex3d( 320, 10, 200 ); glEnd(); glBegin( GL_QUADS ); glTexCoord2f( 1.0f, 0.0f ); glVertex3d( 360, - 30, 240 ); glTexCoord2f( 0.0f, 0.0f ); glVertex3d( 320, - 30, 240 ); glTexCoord2f( 0.0f, 1.0f ); glVertex3d( 320, 10, 240 ); glTexCoord2f( 1.0f, 1.0f ); glVertex3d( 360, 10, 240 ); glEnd(); glBegin( GL_QUADS ); glTexCoord2f( 1.0f, 0.0f ); glVertex3d( 360, - 30, 200 ); glTexCoord2f( 0.0f, 0.0f ); glVertex3d( 320, - 30, 200 ); glTexCoord2f( 0.0f, 1.0f ); glVertex3d( 320, 10, 200 ); glTexCoord2f( 1.0f, 1.0f ); glVertex3d( 360, 10, 200 ); glEnd(); glBindTexture( GL_TEXTURE_2D, texture[ 7 ] ); glBegin( GL_QUADS ); glTexCoord2f( 1.0f, 0.0f ); glVertex3d( 360, - 30, 80 ); glTexCoord2f( 0.0f, 0.0f ); glVertex3d( 360, - 30, 120 ); glTexCoord2f( 0.0f, 1.0f ); glVertex3d( 360, 10, 120 ); glTexCoord2f( 1.0f, 1.0f ); glVertex3d( 360, 10, 80 ); glEnd(); glBegin( GL_QUADS ); glTexCoord2f( 1.0f, 0.0f ); glVertex3d( 320, - 30, 80 ); glTexCoord2f( 0.0f, 0.0f ); glVertex3d( 320, - 30, 120 ); glTexCoord2f( 0.0f, 1.0f ); glVertex3d( 320, 10, 120 ); glTexCoord2f( 1.0f, 1.0f ); glVertex3d( 320, 10, 80 ); glEnd(); glBegin( GL_QUADS ); glTexCoord2f( 1.0f, 0.0f ); glVertex3d( 360, - 30, 80 ); glTexCoord2f( 0.0f, 0.0f ); glVertex3d( 320, - 30, 80 ); glTexCoord2f( 0.0f, 1.0f ); glVertex3d( 320, 10, 80 ); glTexCoord2f( 1.0f, 1.0f ); glVertex3d( 360, 10, 80 ); glEnd(); glBegin( GL_QUADS ); glTexCoord2f( 1.0f, 0.0f ); glVertex3d( 360, - 30, 120 ); glTexCoord2f( 0.0f, 0.0f ); glVertex3d( 320, - 30, 120 ); glTexCoord2f( 0.0f, 1.0f ); glVertex3d( 320, 10, 120 ); glTexCoord2f( 1.0f, 1.0f ); glVertex3d( 360, 10, 120 ); glEnd(); glBindTexture( GL_TEXTURE_2D, texture[ 7 ] ); glBegin( GL_QUADS ); glTexCoord2f( 1.0f, 0.0f ); glVertex3d( 260, - 30, 80 ); glTexCoord2f( 0.0f, 0.0f ); glVertex3d( 260, - 30, 120 ); glTexCoord2f( 0.0f, 1.0f ); glVertex3d( 260, 10, 120 ); glTexCoord2f( 1.0f, 1.0f ); glVertex3d( 260, 10, 80 ); glEnd(); glBegin( GL_QUADS ); glTexCoord2f( 1.0f, 0.0f ); glVertex3d( 220, - 30, 80 ); glTexCoord2f( 0.0f, 0.0f ); glVertex3d( 220, - 30, 120 ); glTexCoord2f( 0.0f, 1.0f ); glVertex3d( 220, 10, 120 ); glTexCoord2f( 1.0f, 1.0f ); glVertex3d( 220, 10, 80 ); glEnd(); glBegin( GL_QUADS ); glTexCoord2f( 1.0f, 0.0f ); glVertex3d( 260, - 30, 80 ); glTexCoord2f( 0.0f, 0.0f ); glVertex3d( 220, - 30, 80 ); glTexCoord2f( 0.0f, 1.0f ); glVertex3d( 220, 10, 80 ); glTexCoord2f( 1.0f, 1.0f ); glVertex3d( 260, 10, 80 ); glEnd(); glBegin( GL_QUADS ); glTexCoord2f( 1.0f, 0.0f ); glVertex3d( 260, - 30, 120 ); glTexCoord2f( 0.0f, 0.0f ); glVertex3d( 220, - 30, 120 ); glTexCoord2f( 0.0f, 1.0f ); glVertex3d( 220, 10, 120 ); glTexCoord2f( 1.0f, 1.0f ); glVertex3d( 260, 10, 120 ); glEnd(); glBindTexture( GL_TEXTURE_2D, texture[ 7 ] ); glBegin( GL_QUADS ); glTexCoord2f( 1.0f, 0.0f ); glVertex3d( 260, - 30, 280 ); glTexCoord2f( 0.0f, 0.0f ); glVertex3d( 260, - 30, 320 ); glTexCoord2f( 0.0f, 1.0f ); glVertex3d( 260, 10, 320 ); glTexCoord2f( 1.0f, 1.0f ); glVertex3d( 260, 10, 280 ); glEnd(); glBegin( GL_QUADS ); glTexCoord2f( 1.0f, 0.0f ); glVertex3d( 220, - 30, 280 ); glTexCoord2f( 0.0f, 0.0f ); glVertex3d( 220, - 30, 320 ); glTexCoord2f( 0.0f, 1.0f ); glVertex3d( 220, 10, 320 ); glTexCoord2f( 1.0f, 1.0f ); glVertex3d( 220, 10, 280 ); glEnd(); glBegin( GL_QUADS ); glTexCoord2f( 1.0f, 0.0f ); glVertex3d( 260, - 30, 280 ); glTexCoord2f( 0.0f, 0.0f ); glVertex3d( 220, - 30, 280 ); glTexCoord2f( 0.0f, 1.0f ); glVertex3d( 220, 10, 280 ); glTexCoord2f( 1.0f, 1.0f ); glVertex3d( 260, 10, 280 ); glEnd(); glBegin( GL_QUADS ); glTexCoord2f( 1.0f, 0.0f ); glVertex3d( 260, - 30, 320 ); glTexCoord2f( 0.0f, 0.0f ); glVertex3d( 220, - 30, 320 ); glTexCoord2f( 0.0f, 1.0f ); glVertex3d( 220, 10, 320 ); glTexCoord2f( 1.0f, 1.0f ); glVertex3d( 260, 10, 320 ); glEnd(); glBindTexture( GL_TEXTURE_2D, texture[ 7 ] ); glBegin( GL_QUADS ); glTexCoord2f( 1.0f, 0.0f ); glVertex3d( 260, - 30, 320 ); glTexCoord2f( 0.0f, 0.0f ); glVertex3d( 260, - 30, 360 ); glTexCoord2f( 0.0f, 1.0f ); glVertex3d( 260, 10, 360 ); glTexCoord2f( 1.0f, 1.0f ); glVertex3d( 260, 10, 320 ); glEnd(); glBegin( GL_QUADS ); glTexCoord2f( 1.0f, 0.0f ); glVertex3d( 220, - 30, 320 ); glTexCoord2f( 0.0f, 0.0f ); glVertex3d( 220, - 30, 360 ); glTexCoord2f( 0.0f, 1.0f ); glVertex3d( 220, 10, 360 ); glTexCoord2f( 1.0f, 1.0f ); glVertex3d( 220, 10, 320 ); glEnd(); glBegin( GL_QUADS ); glTexCoord2f( 1.0f, 0.0f ); glVertex3d( 260, - 30, 320 ); glTexCoord2f( 0.0f, 0.0f ); glVertex3d( 220, - 30, 320 ); glTexCoord2f( 0.0f, 1.0f ); glVertex3d( 220, 10, 320 ); glTexCoord2f( 1.0f, 1.0f ); glVertex3d( 260, 10, 320 ); glEnd(); glBegin( GL_QUADS ); glTexCoord2f( 1.0f, 0.0f ); glVertex3d( 260, - 30, 360 ); glTexCoord2f( 0.0f, 0.0f ); glVertex3d( 220, - 30, 360 ); glTexCoord2f( 0.0f, 1.0f ); glVertex3d( 220, 10, 360 ); glTexCoord2f( 1.0f, 1.0f ); glVertex3d( 260, 10, 360 ); glEnd(); }
void przegroda_x_y( void ) { glBindTexture( GL_TEXTURE_2D, texture[ 7 ] ); glBegin( GL_QUADS ); glTexCoord2f( 1.0f, 0.0f ); glVertex3d( 400, - 30, 0 ); glTexCoord2f( 0.0f, 0.0f ); glVertex3d( - 400, - 30, 0 ); glTexCoord2f( 0.0f, 1.0f ); glVertex3d( - 400, - 28, 0 ); glTexCoord2f( 1.0f, 1.0f ); glVertex3d( 400, - 28, 0 ); glEnd(); glBegin( GL_QUADS ); glTexCoord2f( 1.0f, 0.0f ); glVertex3d( 0, - 30, - 400 ); glTexCoord2f( 0.0f, 0.0f ); glVertex3d( 0, - 30, 400 ); glTexCoord2f( 0.0f, 1.0f ); glVertex3d( 0, - 28, 400 ); glTexCoord2f( 1.0f, 1.0f ); glVertex3d( 0, - 28, - 400 ); glEnd(); }
void display( void ) { glClearColor( 1, 1, 1, 0 ); glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glLoadIdentity(); glEnable( GL_DEPTH_TEST ); glEnable( GL_LIGHT0 ); glShadeModel( GL_SMOOTH ); kamera(); glColor3f( 1.0, 1.0, 1.0 ); przegroda_x_y(); mapa_a(); glBindTexture( GL_TEXTURE_2D, texture[ 2 ] ); glBegin( GL_QUADS ); glTexCoord2f( 1.0f, 0.0f ); glVertex3d( - 400, - 150.0, 400 ); glTexCoord2f( 0.0f, 0.0f ); glVertex3d( 400, - 150.0, 400 ); glTexCoord2f( 0.0f, 1.0f ); glVertex3d( 400, 150.0, 400 ); glTexCoord2f( 1.0f, 1.0f ); glVertex3d( - 400, 150.0, 400 ); glEnd(); glBindTexture( GL_TEXTURE_2D, texture[ 3 ] ); glBegin( GL_QUADS ); glTexCoord2f( 1.0f, 0.0f ); glVertex3d( - 400, - 150.0, - 400 ); glTexCoord2f( 0.0f, 0.0f ); glVertex3d( 400, - 150.0, - 400 ); glTexCoord2f( 0.0f, 1.0f ); glVertex3d( 400, 150.0, - 400 ); glTexCoord2f( 1.0f, 1.0f ); glVertex3d( - 400, 150.0, - 400 ); glEnd(); glBindTexture( GL_TEXTURE_2D, texture[ 4 ] ); glBegin( GL_QUADS ); glTexCoord2f( 1.0f, 0.0f ); glVertex3d( - 400, - 150.0, - 400 ); glTexCoord2f( 0.0f, 0.0f ); glVertex3d( - 400, - 150.0, 400 ); glTexCoord2f( 0.0f, 1.0f ); glVertex3d( - 400, 150.0, 400 ); glTexCoord2f( 1.0f, 1.0f ); glVertex3d( - 400, 150.0, - 400 ); glEnd(); glBindTexture( GL_TEXTURE_2D, texture[ 5 ] ); glBegin( GL_QUADS ); glTexCoord2f( 1.0f, 0.0f ); glVertex3d( 400, - 150.0, 400 ); glTexCoord2f( 0.0f, 0.0f ); glVertex3d( 400, - 150.0, - 400 ); glTexCoord2f( 0.0f, 1.0f ); glVertex3d( 400, 150.0, - 400 ); glTexCoord2f( 1.0f, 1.0f ); glVertex3d( 400, 150.0, 400 ); glEnd(); glBindTexture( GL_TEXTURE_2D, texture[ 1 ] ); glBegin( GL_QUADS ); glTexCoord2f( 1.0f, 0.0f ); glVertex3d( 400, - 30.0, 400 ); glTexCoord2f( 0.0f, 0.0f ); glVertex3d( - 400, - 30.0, 400 ); glTexCoord2f( 0.0f, 1.0f ); glVertex3d( - 400, - 30.0, - 400 ); glTexCoord2f( 1.0f, 1.0f ); glVertex3d( 400, - 30.0, - 400 ); glEnd(); glBindTexture( GL_TEXTURE_2D, texture[ 6 ] ); glBegin( GL_QUADS ); glTexCoord2f( 1.0f, 0.0f ); glVertex3d( 1000, 150.0, 1000 ); glTexCoord2f( 0.0f, 0.0f ); glVertex3d( - 1000, 150.0, 1000 ); glTexCoord2f( 0.0f, 1.0f ); glVertex3d( - 1000, 150.0, - 1000 ); glTexCoord2f( 1.0f, 1.0f ); glVertex3d( 1000, 150.0, - 1000 ); glEnd(); glBindTexture( GL_TEXTURE_2D, texture[ 0 ] ); glutSwapBuffers(); }
void reshape( int w, int h ) { glViewport( 0, 0,( GLsizei ) w,( GLsizei ) h ); glMatrixMode( GL_PROJECTION ); glLoadIdentity(); gluPerspective( 60,( GLfloat ) w /( GLfloat ) h, 2.0, 100000.0 ); glMatrixMode( GL_MODELVIEW ); }
void keyboard( unsigned char key, int x, int y ) { if( key == 's' ) { float xrotrad, yrotrad; yrotrad =( yrot / 180 * 3.141592654f ); xrotrad =( xrot / 180 * 3.141592654f ); xpos -= float( sin( yrotrad ) ); zpos += float( cos( yrotrad ) ); } if( key == 'w' ) { float xrotrad, yrotrad; yrotrad =( yrot / 180 * 3.141592654f ); xrotrad =( xrot / 180 * 3.141592654f ); xpos += float( sin( yrotrad ) ); zpos -= float( cos( yrotrad ) ); } if( key == 'd' ) { } if( key == 'a' ) { } if( key == 27 ) { exit( 0 ); } if( key == '+' ) { } if( key == '-' ) { } }
void SpecialKeys( int key, int x, int y ) { switch( key ) { case GLUT_KEY_UP: break; case GLUT_KEY_DOWN: break; } }
int main( int argc, char ** argv ) { glutInit( & argc, argv ); glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH ); glutInitWindowSize( 1000, 1000 ); glutInitWindowPosition( 100, 100 ); glutCreateWindow( "Mateusz Sulecki" ); glEnable( GL_DEPTH_TEST ); glEnable( GL_TEXTURE_2D ); LoadGLTextures(); glutPassiveMotionFunc( ruch_myszka ); glutDisplayFunc( display ); glutIdleFunc( display ); glutReshapeFunc( reshape ); glutSetCursor( 101 ); glutFullScreen(); glutKeyboardFunc( keyboard ); glutSpecialFunc( SpecialKeys ); glutMainLoop(); return 0; }
|