Heramis Temat założony przez niniejszego użytkownika |
» 2015-12-31 14:37:53 No właśnie w kursie nie widziałem aby było napisane jak dodać biblioteki opengl do programu.
Edit: Udało mi się dodać linkery. Po kolei wklejałem kody z lekcji i testowałem, ale po wgraniu kodu: /* (c) Janusz Ganczarski http://www.januszg.hg.pl JanuszG(małpeczka)enter.net.pl */
#include <GL/glut.h> #include <stdlib.h>
// stałe do obsługi menu podręcznego
enum { FULL_WINDOW, // aspekt obrazu - całe okno ASPECT_1_1, // aspekt obrazu 1:1 EXIT // wyjście };
// aspekt obrazu
int aspect = FULL_WINDOW;
// rozmiary bryły obcinania
const GLdouble left = - 10.0; const GLdouble right = 10.0; const GLdouble bottom = - 10.0; const GLdouble top = 10.0; const GLdouble near = 50.0; const GLdouble far = 70.0;
// współczynnik skalowania
GLfloat scale = 1.0;
// kąty obrotu
GLfloat rotatex = 0.0; GLfloat rotatey = 0.0;
// przesunięcie
GLfloat translatex = 0.0; GLfloat translatey = 0.0;
// wskaźnik naciśnięcia lewego przycisku myszki
int button_state = GLUT_UP;
// położenie kursora myszki
int button_x, button_y;
// funkcja rysująca blok 3x3
void Cube3x3() { glutWireCube( 1.0 ); glTranslatef( 1.0, 0.0, 0.0 ); glutWireCube( 1.0 ); glTranslatef( 0.0, - 1.0, 0.0 ); glutWireCube( 1.0 ); glTranslatef( - 1.0, 0.0, 0.0 ); glutWireCube( 1.0 ); glTranslatef( - 1.0, 0.0, 0.0 ); glutWireCube( 1.0 ); glTranslatef( 0.0, 1.0, 0.0 ); glutWireCube( 1.0 ); glTranslatef( 0.0, 1.0, 0.0 ); glutWireCube( 1.0 ); glTranslatef( 1.0, 0.0, 0.0 ); glutWireCube( 1.0 ); glTranslatef( 1.0, 0.0, 0.0 ); glutWireCube( 1.0 ); }
// funkcja rysująca blok 2x2
void Cube2x2() { glutWireCube( 1.0 ); glTranslatef( 1.0, 0.0, 0.0 ); glutWireCube( 1.0 ); glTranslatef( 0.0, - 1.0, 0.0 ); glutWireCube( 1.0 ); glTranslatef( - 1.0, 0.0, 0.0 ); glutWireCube( 1.0 ); }
// funkcja rysująca piramidę z sześcianów
void Pyramid() { // podstawa 6x6 glPushMatrix(); glTranslatef( 1.5, 1.5, 0.0 ); Cube3x3(); glPopMatrix(); glPushMatrix(); glTranslatef( 1.5, - 1.5, 0.0 ); Cube3x3(); glPopMatrix(); glPushMatrix(); glTranslatef( - 1.5, - 1.5, 0.0 ); Cube3x3(); glPopMatrix(); glPushMatrix(); glTranslatef( - 1.5, 1.5, 0.0 ); Cube3x3(); glPopMatrix(); // drugi poziom 5x5 glPushMatrix(); glTranslatef( 0.0, 0.0, 1.0 ); glPushMatrix(); glTranslatef( 1.0, 1.0, 0.0 ); Cube3x3(); glPopMatrix(); glPushMatrix(); glTranslatef( 1.0, - 1.0, 0.0 ); Cube2x2(); glPopMatrix(); glPushMatrix(); glTranslatef( - 2.0, 2.0, 0.0 ); Cube2x2(); glPopMatrix(); glPushMatrix(); glTranslatef( - 1.0, - 1.0, 0.0 ); Cube3x3(); glPopMatrix(); glPopMatrix(); // trzeci poziom 4x4 glPushMatrix(); glTranslatef( 0.0, 0.0, 2.0 ); glPushMatrix(); glTranslatef( 0.5, - 0.5, 0.0 ); Cube2x2(); glPopMatrix(); glPushMatrix(); glTranslatef( 0.5, 1.5, 0.0 ); Cube2x2(); glPopMatrix(); glPushMatrix(); glTranslatef( - 1.5, 1.5, 0.0 ); Cube2x2(); glPopMatrix(); glPushMatrix(); glTranslatef( - 1.5, - 0.5, 0.0 ); Cube2x2(); glPopMatrix(); glPopMatrix(); // czwarty poziom 3x3 glPushMatrix(); glTranslatef( 0.0, 0.0, 3.0 ); Cube3x3(); glPopMatrix(); // piąty poziom 2x2 glPushMatrix(); glTranslatef( 0.0, 0.0, 4.0 ); glTranslatef( - 0.5, 0.5, 0.0 ); Cube2x2(); glPopMatrix(); // szósty poziom 1x1 glPushMatrix(); glTranslatef( 0.0, 0.0, 5.0 ); glutWireCube( 1.0 ); glPopMatrix(); }
// funkcja generująca scenę 3D
void Display() { // kolor tła - zawartość bufora koloru glClearColor( 1.0, 1.0, 1.0, 1.0 ); // czyszczenie bufora koloru glClear( GL_COLOR_BUFFER_BIT ); // wybór macierzy modelowania glMatrixMode( GL_MODELVIEW ); // macierz modelowania = macierz jednostkowa glLoadIdentity(); // przesunięcie układu współrzędnych obiektu do środka bryły odcinania glTranslatef( 0, 0, -( near + far ) / 2 ); // przesunięcie obiektu - ruch myszką glTranslatef( translatex, translatey, 0.0 ); // skalowanie obiektu - klawisze "+" i "-" glScalef( scale, scale, scale ); // obroty obiektu - klawisze kursora glRotatef( rotatex, 1.0, 0, 0 ); glRotatef( rotatey, 0, 1.0, 0 ); // kolor krawędzi obiektu glColor3f( 0.0, 0.0, 0.0 ); // rysowanie piramidy Pyramid(); // 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(); // parametry bryły obcinania if( aspect == ASPECT_1_1 ) { // wysokość okna większa od wysokości okna if( width < height && width > 0 ) glFrustum( left, right, bottom * height / width, top * height / width, near, far ); else // szerokość okna większa lub równa wysokości okna if( width >= height && height > 0 ) glFrustum( left * width / height, right * width / height, bottom, top, near, far ); } else glFrustum( left, right, bottom, top, near, far ); // generowanie sceny 3D Display(); }
// obsługa klawiatury
void Keyboard( unsigned char key, int x, int y ) { // klawisz + if( key == '+' ) scale += 0.1; else // klawisz - if( key == '-' && scale > 0.1 ) scale -= 0.1; // odrysowanie okna Reshape( glutGet( GLUT_WINDOW_WIDTH ), glutGet( GLUT_WINDOW_HEIGHT ) ); }
// obsługa klawiszy funkcyjnych i klawiszy kursora
void SpecialKeys( int key, int x, int y ) { switch( key ) { // kursor w lewo case GLUT_KEY_LEFT: rotatey -= 1; break; // kursor w górę case GLUT_KEY_UP: rotatex -= 1; break; // kursor w prawo case GLUT_KEY_RIGHT: rotatey += 1; break; // kursor w dół case GLUT_KEY_DOWN: rotatex += 1; break; } // odrysowanie okna Reshape( glutGet( GLUT_WINDOW_WIDTH ), glutGet( GLUT_WINDOW_HEIGHT ) ); }
// obsługa przycisków myszki
void MouseButton( int button, int state, int x, int y ) { if( button == GLUT_LEFT_BUTTON ) { // zapamiętanie stanu lewego przycisku myszki button_state = state; // zapamiętanie położenia kursora myszki if( state == GLUT_DOWN ) { button_x = x; button_y = y; } } }
// obsługa ruchu kursora myszki
void MouseMotion( int x, int y ) { if( button_state == GLUT_DOWN ) { // pobranie macierz modelowania GLdouble model[ 16 ]; glGetDoublev( GL_MODELVIEW_MATRIX, model ); // pobranie macierzy rzutowania GLdouble proj[ 16 ]; glGetDoublev( GL_PROJECTION_MATRIX, proj ); // pobranie obszaru renderingu GLint view[ 4 ]; glGetIntegerv( GL_VIEWPORT, view ); // tablice ze odczytanymi współrzędnymi w przestrzeni widoku GLdouble prev[ 3 ], curr[ 3 ]; // pobranie współrzędnych w przestrzeni widoku // dla poprzedniego położenia kursora myszki gluUnProject( button_x, button_y, 0.0, model, proj, view, prev + 0, prev + 1, prev + 2 ); // pobranie współrzędnych w przestrzeni widoku // dla bieżącego położenia kursora myszki gluUnProject( x, y, 0.0, model, proj, view, curr + 0, curr + 1, curr + 2 ); // obliczenie współrzędnych wektora przesunięcia obiektu translatex += curr[ 0 ] - prev[ 0 ]; translatey += prev[ 1 ] - curr[ 1 ]; // zapamiętanie położenia kursora myszki button_x = x; button_y = y; // odrysowanie okna glutPostRedisplay(); } }
// obsługa menu podręcznego
void Menu( int value ) { switch( value ) { // obszar renderingu - całe okno case FULL_WINDOW: aspect = FULL_WINDOW; Reshape( glutGet( GLUT_WINDOW_WIDTH ), glutGet( GLUT_WINDOW_HEIGHT ) ); break; // obszar renderingu - aspekt 1:1 case ASPECT_1_1: aspect = ASPECT_1_1; Reshape( glutGet( GLUT_WINDOW_WIDTH ), glutGet( GLUT_WINDOW_HEIGHT ) ); break; // wyjście case EXIT: exit( 0 ); } }
int main( int argc, char * argv[] ) { // inicjalizacja biblioteki GLUT glutInit( & argc, argv ); // inicjalizacja bufora ramki glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGB ); // rozmiary głównego okna programu glutInitWindowSize( 400, 400 ); // utworzenie głównego okna programu glutCreateWindow( "Stos modelowania" ); // 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( Keyboard ); // dołączenie funkcji obsługi klawiszy funkcyjnych i klawiszy kursora glutSpecialFunc( SpecialKeys ); // obsługa przycisków myszki glutMouseFunc( MouseButton ); // obsługa ruchu kursora myszki glutMotionFunc( MouseMotion ); // utworzenie podmenu - aspekt obrazu int MenuAspect = glutCreateMenu( Menu ); #ifdef WIN32 glutAddMenuEntry( "Aspekt obrazu - całe okno", FULL_WINDOW ); #else glutAddMenuEntry( "Aspekt obrazu - cale okno", FULL_WINDOW ); #endif glutAddMenuEntry( "Aspekt obrazu 1:1", ASPECT_1_1 ); // menu główne glutCreateMenu( Menu ); glutAddSubMenu( "Aspekt obrazu", MenuAspect ); #ifdef WIN32 glutAddMenuEntry( "Wyjście", EXIT ); #else glutAddMenuEntry( "Wyjscie", EXIT ); #endif // określenie przycisku myszki obsługującego menu podręczne glutAttachMenu( GLUT_RIGHT_BUTTON ); // wprowadzenie programu do obsługi pętli komunikatów glutMainLoop(); return 0; }
Z lekcji: http://cpp0x.pl/kursy/Kurs-OpenGL-C++/Przeksztalcenia-geometryczne/105
Wyskoczyły błędy związane z linijką:
const GLdouble near = 50.0;
A treść błędów to: -------------- Build: Debug in Gra_v1 ---------------
Compiling: Main.cpp F:\Napisanemojegry\Gra_v1\Main.cpp:29: error: expected unqualified-id before '=' token F:\Napisanemojegry\Gra_v1\Main.cpp:30: error: expected unqualified-id before '=' token F:\Napisanemojegry\Gra_v1\Main.cpp: In function 'void Display()': F:\Napisanemojegry\Gra_v1\Main.cpp:191: error: expected primary-expression before ')' token F:\Napisanemojegry\Gra_v1\Main.cpp: In function 'void Reshape(int, int)': F:\Napisanemojegry\Gra_v1\Main.cpp:234: error: expected primary-expression before ',' token F:\Napisanemojegry\Gra_v1\Main.cpp:234: error: expected primary-expression before ')' token F:\Napisanemojegry\Gra_v1\Main.cpp:239: error: expected primary-expression before ',' token F:\Napisanemojegry\Gra_v1\Main.cpp:239: error: expected primary-expression before ')' token F:\Napisanemojegry\Gra_v1\Main.cpp:243: error: expected primary-expression before ',' token F:\Napisanemojegry\Gra_v1\Main.cpp:243: error: expected primary-expression before ')' token Process terminated with status 1 (0 minutes, 0 seconds) 9 errors, 0 warnings
Co tym razem jest nie tak? Pozdrawiam
|