Archiv verlassen und diese Seite im Standarddesign anzeigen : OpenGL mit Kdelvelop
Ich habe vor OpenGL Programmierung zu lernen, aber ich kann die Tutorials, welche man ja überall im Internet findet nicht mit Kdevelop kompilieren,
ich meine wenn ich unter Kdevelop OpenGL programmieren möchte, findet er die Bibliotheken nicht und bringt mir ständig Fehlermeldungen.
Ich habe schon versucht die Bibliotheken irgendwie manuell einzubinden, indem ich beim mittels include auf den vollständigen Pfad verwiesen habe, aber dann brachte mir Kdevelop andere Fehlermeldungen.
Wenn ich aber einfach so über die Konsole ein fertiges Tutorial aus dem Netz kompiliere klappt das ohne Probleme.
Was kann ich machen damit ich unter Kdevelop OpenGL Programmieren kann?
SDL funktioniert schließlich auch.
Ich verwende SuSE 8.0
anda_skoa
11-07-2002, 14:41
Du mußt in den Projekt->Optionen bei den Compiler Einstellungen die Pfade der includes angeben, und bei den Linker Optionen die Pfder der Libs und die lib selbst.
Also -I/usr/inlcude/GL bei den Compiler settings
und -L/usr/lib -lGL
(Pfade auf meinem System)
Eventuell brauchst du noch anderen libs/header, ich hab GL noch nie selbst kompiliert.
Was waren denn die Fehlermeldungen?
Ciao,
_
Das Problem ist immer noch da, ich hab jetzt zwar alles richtig eingetragen, aber alles was auf die Funktionen der GL Header - Dateien verweist will er einfach nicht! die Fehlermeldungen sind :
undefined reference to 'gluPerspective'
und noch viele weitere in der Art
er findet sämtliche funktionen nicht wie z.B.: 'InitGL'
Wenn ich allerdings den gleichen Quellcode in der Kommandozeile selbst Kompiliere klapp es prima, das ist aber nicht sinn und zweck der Sache
anda_skoa
11-07-2002, 21:58
Hmm, das ist ein Linker Fehler, d.h zumindest das include passt.
Welche Libs gibts du beim Linker an?
Kannst du die letzten Zeilen des make outputs posten?
Also ins Projekt Verzeichnis gehen und dort händisch make ausführen.
Den Fehler und sagen wird die 10 Zeilen darüber.
Und vielleicht noch die Commandlien, wenn du es selber kompilierst.
Ciao,
_
Ich Poste hier mal den Code und die Fehlermeldungen :
Code :
#include <SDL/SDL.h>
#include <stdio.h>
#include <stdlib.h>
#include <GL/gl.h>
#include <GL/glu.h>
/* screen width, height, and bit depth */
#define SCREEN_WIDTH 640
#define SCREEN_HEIGHT 480
#define SCREEN_BPP 16
/* Define our booleans */
#define TRUE 1
#define FALSE 0
/* This is our SDL surface */
SDL_Surface *surface;
/* function to release/destroy our resources and restoring the old desktop */
void Quit( int returnCode )
{
/* clean up the window */
SDL_Quit( );
/* and exit appropriately */
exit( returnCode );
}
/* function to reset our viewport after a window resize */
int resizeWindow( int width, int height )
{
/* Height / width ration */
GLfloat ratio;
/* Protect against a divide by zero */
if ( height == 0 )
height = 1;
ratio = ( GLfloat )width / ( GLfloat )height;
/* Setup our viewport. */
glViewport( 0, 0, ( GLsizei )width, ( GLsizei )height );
/* change to the projection matrix and set our viewing volume. */
glMatrixMode( GL_PROJECTION );
glLoadIdentity( );
/* Set our perspective */
gluPerspective( 45.0f, ratio, 0.1f, 100.0f );
/* Make sure we're chaning the model view and not the projection */
glMatrixMode( GL_MODELVIEW );
/* Reset The View */
glLoadIdentity( );
return( TRUE );
}
/* function to handle key press events */
void handleKeyPress( SDL_keysym *keysym )
{
switch ( keysym->sym )
{
case SDLK_ESCAPE:
/* ESC key was pressed */
Quit( 0 );
break;
case SDLK_F1:
/* F1 key was pressed
* this toggles fullscreen mode
*/
SDL_WM_ToggleFullScreen( surface );
break;
default:
break;
}
return;
}
/* general OpenGL initialization function */
int initGL( GLvoid )
{
/* Enable smooth shading */
glShadeModel( GL_SMOOTH );
/* Set the background black */
glClearColor( 0.0f, 0.0f, 0.0f, 0.0f );
/* Depth buffer setup */
glClearDepth( 1.0f );
/* Enables Depth Testing */
glEnable( GL_DEPTH_TEST );
/* The Type Of Depth Test To Do */
glDepthFunc( GL_LEQUAL );
/* Really Nice Perspective Calculations */
glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST );
return( TRUE );
}
/* Here goes our drawing code */
int drawGLScene( GLvoid )
{
/* These are to calculate our fps */
static GLint T0 = 0;
static GLint Frames = 0;
/* Clear The Screen And The Depth Buffer */
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
/* Move Left 1.5 Units And Into The Screen 6.0 */
glLoadIdentity();
glTranslatef( -1.5f, 0.0f, -6.0f );
glBegin( GL_TRIANGLES ); /* Drawing Using Triangles */
glVertex3f( 0.0f, 1.0f, 0.0f ); /* Top */
glVertex3f( -1.0f, -1.0f, 0.0f ); /* Bottom Left */
glVertex3f( 1.0f, -1.0f, 0.0f ); /* Bottom Right */
glEnd( ); /* Finished Drawing The Triangle */
/* Move Right 3 Units */
glTranslatef( 3.0f, 0.0f, 0.0f );
glBegin( GL_QUADS ); /* Draw A Quad */
glVertex3f( -1.0f, 1.0f, 0.0f ); /* Top Left */
glVertex3f( 1.0f, 1.0f, 0.0f ); /* Top Right */
glVertex3f( 1.0f, -1.0f, 0.0f ); /* Bottom Right */
glVertex3f( -1.0f, -1.0f, 0.0f ); /* Bottom Left */
glEnd( ); /* Done Drawing The Quad */
/* Draw it to the screen */
SDL_GL_SwapBuffers( );
/* Gather our frames per second */
Frames++;
{
GLint t = SDL_GetTicks();
if (t - T0 >= 5000) {
GLfloat seconds = (t - T0) / 1000.0;
GLfloat fps = Frames / seconds;
printf("%d frames in %g seconds = %g FPS\n", Frames, seconds, fps);
T0 = t;
Frames = 0;
}
}
return( TRUE );
}
int main( int argc, char **argv )
{
/* Flags to pass to SDL_SetVideoMode */
int videoFlags;
/* main loop variable */
int done = FALSE;
/* used to collect events */
SDL_Event event;
/* this holds some info about our display */
const SDL_VideoInfo *videoInfo;
/* whether or not the window is active */
int isActive = TRUE;
/* initialize SDL */
if ( SDL_Init( SDL_INIT_VIDEO ) < 0 )
{
fprintf( stderr, "Video initialization failed: %s\n",
SDL_GetError( ) );
Quit( 1 );
}
/* Fetch the video info */
videoInfo = SDL_GetVideoInfo( );
if ( !videoInfo )
{
fprintf( stderr, "Video query failed: %s\n",
SDL_GetError( ) );
Quit( 1 );
}
/* the flags to pass to SDL_SetVideoMode */
videoFlags = SDL_OPENGL; /* Enable OpenGL in SDL */
videoFlags |= SDL_GL_DOUBLEBUFFER; /* Enable double buffering */
videoFlags |= SDL_HWPALETTE; /* Store the palette in hardware */
videoFlags |= SDL_RESIZABLE; /* Enable window resizing */
/* This checks to see if surfaces can be stored in memory */
if ( videoInfo->hw_available )
videoFlags |= SDL_HWSURFACE;
else
videoFlags |= SDL_SWSURFACE;
/* This checks if hardware blits can be done */
if ( videoInfo->blit_hw )
videoFlags |= SDL_HWACCEL;
/* Sets up OpenGL double buffering */
SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );
/* get a SDL surface */
surface = SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP,
videoFlags );
/* Verify there is a surface */
if ( !surface )
{
fprintf( stderr, "Video mode set failed: %s\n", SDL_GetError( ) );
Quit( 1 );
}
/* initialize OpenGL */
initGL( );
/* resize the initial window */
resizeWindow( SCREEN_WIDTH, SCREEN_HEIGHT );
/* wait for events */
while ( !done )
{
/* handle the events in the queue */
while ( SDL_PollEvent( &event ) )
{
switch( event.type )
{
case SDL_ACTIVEEVENT:
/* Something's happend with our focus
* If we lost focus or we are iconified, we
* shouldn't draw the screen
*/
if ( event.active.gain == 0 )
isActive = FALSE;
else
isActive = TRUE;
break;
case SDL_VIDEORESIZE:
/* handle resize event */
surface = SDL_SetVideoMode( event.resize.w,
event.resize.h,
16, videoFlags );
if ( !surface )
{
fprintf( stderr, "Could not get a surface after resize: %s\n", SDL_GetError( ) );
Quit( 1 );
}
resizeWindow( event.resize.w, event.resize.h );
break;
case SDL_KEYDOWN:
/* handle key presses */
handleKeyPress( &event.key.keysym );
break;
case SDL_QUIT:
/* handle quit requests */
done = TRUE;
break;
default:
break;
}
}
/* draw the scene */
if ( isActive )
drawGLScene( );
}
/* clean ourselves up and exit */
Quit( 0 );
/* Should never get here */
return( 0 );
}
Fehlermeldungen :
gmake all-recursive
gmake[1]: Wechsel in das Verzeichnis Verzeichnis »/home/ronny/KDE-Projekte/lektion1«
cd . && \
CONFIG_HEADERS= CONFIG_LINKS= \
CONFIG_FILES=Makefile /bin/sh ./config.status
fast creating Makefile
gmake[1]: Verlassen des Verzeichnisses Verzeichnis »/home/ronny/KDE-Projekte/lektion1«
gmake[1]: Wechsel in das Verzeichnis Verzeichnis »/home/ronny/KDE-Projekte/lektion1«
Making all in lektion1
gmake[2]: Wechsel in das Verzeichnis Verzeichnis »/home/ronny/KDE-Projekte/lektion1/lektion1«
Making all in docs
gmake[3]: Wechsel in das Verzeichnis Verzeichnis »/home/ronny/KDE-Projekte/lektion1/lektion1/docs«
Making all in en
gmake[4]: Wechsel in das Verzeichnis Verzeichnis »/home/ronny/KDE-Projekte/lektion1/lektion1/docs/en«
gmake[4]: Für das Target »all« gibt es nichts zu tun.
gmake[4]: Verlassen des Verzeichnisses Verzeichnis »/home/ronny/KDE-Projekte/lektion1/lektion1/docs/en«
gmake[4]: Wechsel in das Verzeichnis Verzeichnis »/home/ronny/KDE-Projekte/lektion1/lektion1/docs«
gmake[4]: Für das Target »all-am« gibt es nichts zu tun.
gmake[4]: Verlassen des Verzeichnisses Verzeichnis »/home/ronny/KDE-Projekte/lektion1/lektion1/docs«
gmake[3]: Verlassen des Verzeichnisses Verzeichnis »/home/ronny/KDE-Projekte/lektion1/lektion1/docs«
gmake[3]: Wechsel in das Verzeichnis Verzeichnis »/home/ronny/KDE-Projekte/lektion1/lektion1«
gmake[3]: Verlassen des Verzeichnisses Verzeichnis »/home/ronny/KDE-Projekte/lektion1/lektion1«
gmake[3]: *** Keine Regel vorhanden, um das Target »-I/usr/inlcude/GL«,
benötigt von »lektion1«, zu erstellen. Schluss.
gmake[2]: Verlassen des Verzeichnisses Verzeichnis »/home/ronny/KDE-Projekte/lektion1/lektion1«
gmake[1]: Verlassen des Verzeichnisses Verzeichnis »/home/ronny/KDE-Projekte/lektion1«
gmake[2]: *** [all-recursive] Fehler 1
gmake[1]: *** [all-recursive] Fehler 1
gmake: *** [all] Fehler 2
*** fehlgeschlagen ***
Es sind aber alle Bibliotheken eingetragen und die Verzeichnisse stimmen auch :
-lpthread -L/usr/lib -lSDL -I/usr/inlcude/GL -L/usr/lib -lGL
Beim Kompilieren der Kommandozeile sieht es so aus :
gcc -Wall -I/usr/include/ -c -o lektion1.o lektion1.c
gcc -Wall -I/usr/include/ -o lektion1 -L/usr/X11R6/lib lesson2.o -lX11 -lXi -lXmu -lglut -lGL -lGLU -lm
rm lektion1.o
Ich habe den Code aus einem Tutorial einfach rüber kopiert, aber es will halt einfach nicht klappen, außer in der Kommandozeile wenn ich es selbst kompiliere
anda_skoa
12-07-2002, 12:39
Original geschrieben von rk79
gmake[3]: *** Keine Regel vorhanden, um das Target »-I/usr/inlcude/GL«,
Er hält das für ein Target.
Es ist außerdem falsch geschrieben (l und c vertauscht)
Es sind aber alle Bibliotheken eingetragen und die Verzeichnisse stimmen auch :
-lpthread -L/usr/lib -lSDL -I/usr/inlcude/GL -L/usr/lib -lGL
Da sind aber zu wenige, wenn du alle brauchts, die unten auch angegeben sind.
Es fehlen -lglut -lGLU eventuell -lXmu, weiß jetzt nicht auswenig, für welche Libs es schon chekboxes gibt.
Außerdem kannst du das -I/usr/include/GL weg lassen, weil du die Header mit <GL/> einbindest, und /usr/include schon von KDevelop in den Suchpfad aufgenommen wurde (wahrscheinlich macht das der gcc sogar selber)
Beim Kompilieren der Kommandozeile sieht es so aus :
gcc -Wall -I/usr/include/ -c -o lektion1.o lektion1.c
gcc -Wall -I/usr/include/ -o lektion1 -L/usr/X11R6/lib lesson2.o -lX11 -lXi -lXmu -lglut -lGL -lGLU -lm
rm lektion1.o
Wenn das automake generierete Makefile läuft, kommen so ähnliche Zeilen als Ausgabe.
Schau da nach, ob etwas fehlt.
So wie im Moment offensichtlich GLU und glut
Für -lm gibt es eine checkbox zum ankreuzen.
X11 dürfte standardmäßig aktiviert sein, Xi und Xmu keine Ahnung.
Ciao,
_
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.