nextt1994 Temat założony przez niniejszego użytkownika |
[OpenGL] Mam problem z wstawieniem bmp do programu. » 2013-03-11 15:16:31 Mam oddać program na zaliczenie, lecz nie mam pojęcia jak zrobić by obłożyć jakiś obiekt jakąś bmp'ą. Prosze o pomoc. #include <windows.h> #define GLUT_DISABLE_ATEXIT_HACK #include <gl/glut.h> #include <gl/glu.h> #include <gl/glaux.h> #include <gl/gl.h> #include <stdlib.h> #include <math.h>
float xpos = 90, ypos = - 25, zpos = 90, xrot = 0, yrot = 0, angle = 0.0; float step = 0.08, step2 =- 0.03, step3 = 0.03;
float xx = 0, yy = 0, zz = 0, xm1, ym1;
void ruchmyszki( int xm, int ym ) { xrot =( ym + ym1 ) / 2; yrot =( xm + xm1 ) / 2; xm1 = xm; ym1 = ym; }
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 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(); glBegin( GL_LINES ); glColor3f( 0.0, 0.0, 0.0 ); glVertex3f( 30.0, 30.0, 30.0 ); glVertex3f( 30.0, - 30.0, 30.0 ); glVertex3f( 30.0, - 30.0, 30.0 ); glVertex3f( 30.0, - 30.0, - 30.0 ); glVertex3f( 30.0, - 30.0, - 30.0 ); glVertex3f( 30.0, 30.0, - 30.0 ); glVertex3f( 30.0, 30.0, - 30.0 ); glVertex3f( 30.0, 30.0, 30.0 ); glVertex3f( - 30.0, 30.0, 30.0 ); glVertex3f( - 30.0, - 30.0, 30.0 ); glVertex3f( - 30.0, - 30.0, 30.0 ); glVertex3f( - 30.0, - 30.0, - 30.0 ); glVertex3f( - 30.0, - 30.0, - 30.0 ); glVertex3f( - 30.0, 30.0, - 30.0 ); glVertex3f( - 30.0, 30.0, - 30.0 ); glVertex3f( - 30.0, 30.0, 30.0 ); glVertex3f( 30.0, 30.0, 30.0 ); glVertex3f( - 30.0, 30.0, 30.0 ); glVertex3f( 30.0, - 30.0, 30.0 ); glVertex3f( - 30.0, - 30.0, 30.0 ); glVertex3f( 30.0, - 30.0, - 30.0 ); glVertex3f( - 30.0, - 30.0, - 30.0 ); glVertex3f( 30.0, 30.0, - 30.0 ); glVertex3f( - 30.0, 30.0, - 30.0 ); glEnd(); glBegin( GL_QUADS ); glColor3f( 1.0, 9.0, 0.0 ); glVertex3d( 100, - 30.0, 100 ); glVertex3d( - 100, - 30.0, 100 ); glVertex3d( - 100, - 30.0, - 100 ); glVertex3d( 100, - 30.0, - 100 ); glEnd(); glTranslatef( xx, yy, zz ); glColor3f( 0.0, 2.0, 1.0 ); glutWireSphere( 10, 20, 10 ); glutSwapBuffers(); angle++; glutTimerFunc( 100, animacja, 1 ); }
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, 1000.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' ) { yrot += 1; if( yrot > 360 ) yrot -= 360; } if( key == 'a' ) { yrot -= 1; if( yrot < - 360 ) yrot += 360; } if( key == 27 ) { exit( 0 ); } if( key == '+' ) { } if( key == '-' ) { } }
void SpecialKeys( int key, int x, int y ) { switch( key ) { case GLUT_KEY_UP: ypos += 1; break; case GLUT_KEY_DOWN: ypos -= 1; break; } }
int main( int argc, char ** argv ) { glutInit( & argc, argv ); glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH ); glutInitWindowSize( 800, 800 ); glutInitWindowPosition( 100, 100 ); glutCreateWindow( "Mateusz Sulecki" ); glutFullScreen(); glutDisplayFunc( display ); glutIdleFunc( display ); glutReshapeFunc( reshape ); ShowCursor( FALSE ); glutPassiveMotionFunc( ruchmyszki ); glutKeyboardFunc( keyboard ); glutSpecialFunc( SpecialKeys ); glutMainLoop(); return 0; }
|
|
SeaMonster131 |
» 2013-03-11 15:22:23 |
|
Gabes |
» 2013-03-11 15:30:59 Do odpowiedniego ustawienia tekstury masz koordynaty. glBegin( GL_QUADS ); glTexCoord2f( 1.0f, 0.0f ); glVertex3f( 1.0, - 1.0, 0.0 ); glTexCoord2f( 0.0f, 0.0f ); glVertex3f( - 1.0, - 1.0, 0.0 ); glTexCoord2f( 0.0f, 1.0f ); glVertex3f( - 1.0, 1.0, 0.0 ); glTexCoord2f( 1.0f, 1.0f ); glVertex3f( 1.0, 1.0, 0.0 ); |
|
nextt1994 Temat założony przez niniejszego użytkownika |
» 2013-03-12 17:32:01 Teraz mam problem z linkierem. [Linker error] undefined reference to `glGetString@4' more undefined references to `glGetString@4' follow [Linker error] undefined reference to `wglGetProcAddress@4' [Linker error] undefined reference to `glTexImage2D@36' [Linker error] undefined reference to `glDeleteTextures@8' [Linker error] undefined reference to `glReadPixels@28' [Linker error] undefined reference to `glGetIntegerv@8' [Linker error] undefined reference to `glTexImage2D@36' [Linker error] undefined reference to `glGenTextures@8' [Linker error] undefined reference to `glTexImage2D@36'
to co mam w Project > Project Opcions > Patameters > Linker: -lopengl32 lib/libopengl32.a lib/libglu32.a lib/libglut32.a lib/libSOIL.a lib/libSOIL.a
a oto cały kod #include <windows.h> #define GLUT_DISABLE_ATEXIT_HACK #include "glut.h" #include "SOIL.h" #include <gl/glu.h> #include <gl/gl.h> #include <stdlib.h> #include <math.h> GLuint texture[ 0 ]; int LoadGLTextures() { texture[ 0 ] = SOIL_load_OGL_texture ( "Data/obraz1.bmp", SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_INVERT_Y ); if( texture[ 0 ] == 0 ) return false; glBindTexture( GL_TEXTURE_2D, texture[ 0 ] ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); return true; }
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 ); glBegin( GL_QUADS ); glColor3f( 1.0, 9.0, 0.0 ); glVertex3f( 0.5, - 0.5, 0.0 ); glVertex3f( - 0.5, - 0.5, 0.0 ); glVertex3f( - 0.5, 0.5, 0.0 ); glVertex3f( 0.5, 0.5, 0.0 ); glEnd(); glutSwapBuffers(); }
int main( int argc, char ** argv ) { glutInit( & argc, argv ); glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH ); glutInitWindowSize( 1000, 1000 ); glutInitWindowPosition( 100, 100 ); glutCreateWindow( "Mateusz Sulecki" ); glutDisplayFunc( display ); glutIdleFunc( display ); glutMainLoop(); return 0; }
|
|
pekfos |
» 2013-03-12 20:55:34 -lopengl32 lib/libopengl32.a lib/libglu32.a lib/libglut32.a lib/libSOIL.a lib/libSOIL.a |
I jak to ma działać? Tylko pierwsza linia to opcja linkera. |
|
Gabes |
» 2013-03-12 22:20:40 Najprostszy kod wyglądałby tak: #include "gl/glut.h" #include "SOIL.h" GLuint texture[ 0 ]; int LoadGLTextures() { texture[ 0 ] = SOIL_load_OGL_texture( "obrazek.bmp", SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_INVERT_Y ); if( texture[ 0 ] == 0 ) return false; glBindTexture( GL_TEXTURE_2D, texture[ 0 ] ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); return true; } void display( void ) { glClearColor( 1, 1, 1, 0 ); glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glLoadIdentity(); glBegin( GL_QUADS ); glColor3f( 1.0, 1.0, 1.0 ); glTexCoord2f( 1.0f, 0.0f ); glVertex3f( 0.5, - 0.5, 0.0 ); glTexCoord2f( 0.0f, 0.0f ); glVertex3f( - 0.5, - 0.5, 0.0 ); glTexCoord2f( 0.0f, 1.0f ); glVertex3f( - 0.5, 0.5, 0.0 ); glTexCoord2f( 1.0f, 1.0f ); glVertex3f( 0.5, 0.5, 0.0 ); glEnd(); glutSwapBuffers(); } int main( int argc, char ** argv ) { glutInit( & argc, argv ); glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH ); glutInitWindowSize( 600, 600 ); glutInitWindowPosition( 100, 100 ); glutCreateWindow( ":)" ); glEnable( GL_DEPTH_TEST ); glEnable( GL_TEXTURE_2D ); LoadGLTextures(); glutDisplayFunc( display ); glutIdleFunc( display ); glutMainLoop(); return 0; } do linkera należy wpisać: SOIL glut32 opengl32 gdi32 winmm ważna jest kolejność dodania poszczególnych bibliotek, wielkość liter nie, można zapisać Soil, sOiL. Wszystkie biblioteki do OpenGL trzymamy w folderze GL.w include. stąd zapis gl/glut.h No może poza SOIL. |
|
nextt1994 Temat założony przez niniejszego użytkownika |
» 2013-03-13 07:19:22 No ale jak te: -lopengl32 lib/libopengl32.a lib/libglu32.a lib/libglut32.a lib/libSOIL.a
mam zapisane to gdzie mam projekt. a poza tym linker do gluta tak mi działa ;/ |
|
nextt1994 Temat założony przez niniejszego użytkownika |
» 2013-03-13 19:34:49 Pomóżcie Prosze. Tu na screenie widać co mam w linkerze wpisane i jaki błąd mi pokazuje w kompilacji. http://www25.speedyshare.com/QZWvZ/download/screen1.jpg. Wkleiłem cały kod Gabes'a. Pliki w katalogu które mam: folder lib, a w nim : libglu32.a libglut32.a libopengl32.a libSOIL.a Poniżej wkleje kod z Makefile.win : # Project: Project1 # Makefile created by Dev-C++ 4.9.9.2
CPP = g++.exe CC = gcc.exe WINDRES = windres.exe RES = OBJ = main.o $(RES) LINKOBJ = main.o $(RES) LIBS = -L"D:/Programowanie/49/Dev-Cpp/lib" -L"C:/Users/NeXT/Desktop/Projekt na Psio/lib" -mwindows -SOIL -glut32 -glu32 -opengl32 -gdi32 -winmm INCS = -I"D:/Programowanie/49/Dev-Cpp/include" CXXINCS = -I"D:/Programowanie/49/Dev-Cpp/lib/gcc/mingw32/3.4.2/include" -I"D:/Programowanie/49/Dev-Cpp/include/c++/3.4.2/backward" -I"D:/Programowanie/49/Dev-Cpp/include/c++/3.4.2/mingw32" -I"D:/Programowanie/49/Dev-Cpp/include/c++/3.4.2" -I"D:/Programowanie/49/Dev-Cpp/include" BIN = Project1.exe CXXFLAGS = $(CXXINCS) CFLAGS = $(INCS) RM = rm -f
.PHONY: all all-before all-after clean clean-custom
all: all-before Project1.exe all-after
clean: clean-custom ${RM} $(OBJ) $(BIN)
$(BIN): $(OBJ) $(CPP) $(LINKOBJ) -o "Project1.exe" $(LIBS)
main.o: main.cpp $(CPP) -c main.cpp -o main.o $(CXXFLAGS)
Proszę pomóżcie. |
|
« 1 » 2 |