ison Temat założony przez niniejszego użytkownika |
» 2010-02-23 15:09:51 Tu jest cały kod przykładowego programu, nie wiem co on robi bo nie mogę skompilować: #include <windows.h> #include <GL/glut.h> #include <stdlib.h>
static int slices = 16; static int stacks = 16;
static void resize( int width, int height ) { const float ar =( float ) width /( float ) height; glViewport( 0, 0, width, height ); glMatrixMode( GL_PROJECTION ); glLoadIdentity(); glFrustum( - ar, ar, - 1.0, 1.0, 2.0, 100.0 ); glMatrixMode( GL_MODELVIEW ); glLoadIdentity(); }
static void display( void ) { const double t = glutGet( GLUT_ELAPSED_TIME ) / 1000.0; const double a = t * 90.0; glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glColor3d( 1, 0, 0 ); glPushMatrix(); glTranslated( - 2.4, 1.2, - 6 ); glRotated( 60, 1, 0, 0 ); glRotated( a, 0, 0, 1 ); glutSolidSphere( 1, slices, stacks ); glPopMatrix(); glPushMatrix(); glTranslated( 0, 1.2, - 6 ); glRotated( 60, 1, 0, 0 ); glRotated( a, 0, 0, 1 ); glutSolidCone( 1, 1, slices, stacks ); glPopMatrix(); glPushMatrix(); glTranslated( 2.4, 1.2, - 6 ); glRotated( 60, 1, 0, 0 ); glRotated( a, 0, 0, 1 ); glutSolidTorus( 0.2, 0.8, slices, stacks ); glPopMatrix(); glPushMatrix(); glTranslated( - 2.4, - 1.2, - 6 ); glRotated( 60, 1, 0, 0 ); glRotated( a, 0, 0, 1 ); glutWireSphere( 1, slices, stacks ); glPopMatrix(); glPushMatrix(); glTranslated( 0, - 1.2, - 6 ); glRotated( 60, 1, 0, 0 ); glRotated( a, 0, 0, 1 ); glutWireCone( 1, 1, slices, stacks ); glPopMatrix(); glPushMatrix(); glTranslated( 2.4, - 1.2, - 6 ); glRotated( 60, 1, 0, 0 ); glRotated( a, 0, 0, 1 ); glutWireTorus( 0.2, 0.8, slices, stacks ); glPopMatrix(); glutSwapBuffers(); }
static void key( unsigned char key, int x, int y ) { switch( key ) { case 27: case 'q': exit( 0 ); break; case '+': slices++; stacks++; break; case '-': if( slices > 3 && stacks > 3 ) { slices--; stacks--; } break; } glutPostRedisplay(); }
static void idle( void ) { glutPostRedisplay(); }
const GLfloat light_ambient[] = { 0.0f, 0.0f, 0.0f, 1.0f }; const GLfloat light_diffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f }; const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f }; const GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f };
const GLfloat mat_ambient[] = { 0.7f, 0.7f, 0.7f, 1.0f }; const GLfloat mat_diffuse[] = { 0.8f, 0.8f, 0.8f, 1.0f }; const GLfloat mat_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f }; const GLfloat high_shininess[] = { 100.0f };
int main( int argc, char * argv[] ) { glutInit( & argc, argv ); glutInitWindowSize( 640, 480 ); glutInitWindowPosition( 10, 10 ); glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH ); glutCreateWindow( "FreeGLUT Shapes" ); glutReshapeFunc( resize ); glutDisplayFunc( display ); glutKeyboardFunc( key ); glutIdleFunc( idle ); glClearColor( 1, 1, 1, 1 ); glEnable( GL_CULL_FACE ); glCullFace( GL_BACK ); glEnable( GL_DEPTH_TEST ); glDepthFunc( GL_LESS ); glEnable( GL_LIGHT0 ); glEnable( GL_NORMALIZE ); glEnable( GL_COLOR_MATERIAL ); glEnable( GL_LIGHTING ); glLightfv( GL_LIGHT0, GL_AMBIENT, light_ambient ); glLightfv( GL_LIGHT0, GL_DIFFUSE, light_diffuse ); glLightfv( GL_LIGHT0, GL_SPECULAR, light_specular ); glLightfv( GL_LIGHT0, GL_POSITION, light_position ); glMaterialfv( GL_FRONT, GL_AMBIENT, mat_ambient ); glMaterialfv( GL_FRONT, GL_DIFFUSE, mat_diffuse ); glMaterialfv( GL_FRONT, GL_SPECULAR, mat_specular ); glMaterialfv( GL_FRONT, GL_SHININESS, high_shininess ); glutMainLoop(); return EXIT_SUCCESS; }
Problem w tym że sam OpenGL działa tylko z glutem coś nie tak zalinkowane mam: -lglut32 -lglu32 -lopengl32 tak jak być powinno, a błędów o linkowaniu wyskakuje multum, nie wiem czy dam rade je wszystkie tu skopiować, oto kilka z nich: [Linker error] undefined reference to `_imp____glutInitWithExit@12' [Linker error] undefined reference to `_imp____glutCreateWindowWithExit@8' [Linker error] undefined reference to `_imp____glutCreateMenuWithExit@8' [Linker error] undefined reference to `_imp__glutGet@4' |