Einstieg in OpenGL und Glut. Was brauche ich?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Deblix
Beiträge: 585
Registriert: 23.05.2003 17:33:48
Wohnort: Bremen

Einstieg in OpenGL und Glut. Was brauche ich?

Beitrag von Deblix » 13.11.2004 16:06:35

Nachdem ich im Forum kaum etwas finden konnte, hoffe ich, dass es hier mal für alle geklärt wird:

Ich habe bereits C++ voll drauf und wollte nun meinen Horizont mit der OpenGL erweitern, doch was brauche ich alles?

Da ich auf jeden Fall OpenGL lernen möchte, habe ich mir sogleich das RedBook (für Version 1.4) gekauft und will nun mein erstes Programm zum laufen kriegen.

Neben GCC und den ganzen anderen Tools (Make, Automake, Autoconf, ...) habe ich noch die Pakete glutg3-dev installiert und es sind alle nötigen Bibliotheken (gl.h, glu.h, glut.h) auch im System. Dennoch weigert sich GCC den Code (den ich aus dem RedBook habe) zu kompilieren.

Hier der Code:

Code: Alles auswählen


#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>

#include <stdio.h>
#include <stdlib.h>

void init(void);
void display(void);

int main(int argc, char* argv[])
{
 glutInit(&argc, argv);
 glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
 glutInitWindowSize(250, 250);
 glutInitWindowPosition(100, 100);
 glutCreateWindow("hello");
 init();
 glutDisplayFunc(display);
 glutMainLoop();
 return EXIT_SUCCESS;
}

void init(void)
{
 glClearColor(0.0, 0.0, 0.0, 0.0);
 glMatrixMode(GL_PROJECTION);
 glLoadIdentity();
 glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
}

void display(void)
{
 glClear(GL_COLOR_BUFFER_BIT);
 glColor3f(1.0, 1.0, 1.0);
 glBegin(GL_POLYGON);
  glVertex3f(0.25, 0.25, 0.0);
  glVertex3f(0.75, 0.25, 0.0);
  glVertex3f(0.75, 0.75, 0.0);
  glVertex3f(0.25, 0.75, 0.0);
 glEnd();
 
 glFlush();
}
Hier die Ausgabe:

Code: Alles auswählen

linking gltest (libtool)
linking gltest (gcc)
/home/user/Source/gltest/src/gltest.c:19: undefined reference to `glutInit'
gltest.o(.text+0x2a):/home/user/Source/gltest/src/gltest.c:20: undefined reference to `glutInitDisplayMode'
gltest.o(.text+0x3e):/home/user/Source/gltest/src/gltest.c:21: undefined reference to `glutInitWindowSize'
gltest.o(.text+0x52):/home/user/Source/gltest/src/gltest.c:22: undefined reference to `glutInitWindowPosition'
gltest.o(.text+0x5e):/home/user/Source/gltest/src/gltest.c:23: undefined reference to `glutCreateWindow'
gltest.o(.text+0x6f):/home/user/Source/gltest/src/gltest.c:25: undefined reference to `glutDisplayFunc'
gltest.o(.text+0x74):/home/user/Source/gltest/src/gltest.c:26: undefined reference to `glutMainLoop'
/home/user/Source/gltest/src/gltest.c:32: undefined reference to `glClearColor'
gltest.o(.text+0xb5):/home/user/Source/gltest/src/gltest.c:33: undefined reference to `glMatrixMode'
gltest.o(.text+0xba):/home/user/Source/gltest/src/gltest.c:34: undefined reference to `glLoadIdentity'
gltest.o(.text+0xe6):/home/user/Source/gltest/src/gltest.c:35: undefined reference to `glOrtho'
/home/user/Source/gltest/src/gltest.c:40: undefined reference to `glClear'
gltest.o(.text+0x119):/home/user/Source/gltest/src/gltest.c:41: undefined reference to `glColor3f'
gltest.o(.text+0x125):/home/user/Source/gltest/src/gltest.c:42: undefined reference to `glBegin'
gltest.o(.text+0x144):/home/user/Source/gltest/src/gltest.c:43: undefined reference to `glVertex3f'
gltest.o(.text+0x163):/home/user/Source/gltest/src/gltest.c:44: undefined reference to `glVertex3f'
gltest.o(.text+0x182):/home/user/Source/gltest/src/gltest.c:45: undefined reference to `glVertex3f'
gltest.o(.text+0x1a1):/home/user/Source/gltest/src/gltest.c:46: undefined reference to `glVertex3f'
gltest.o(.text+0x1a6):/home/user/Source/gltest/src/gltest.c:47: undefined reference to `glEnd'
gltest.o(.text+0x1ab):/home/user/Source/gltest/src/gltest.c:49: undefined reference to `glFlush'
*** Exited with status: 2 ***
Fehlt da irgendwas, oder liegt das am System?

DLMartin
Beiträge: 31
Registriert: 09.05.2004 11:28:12
Wohnort: Graz
Kontaktdaten:

Beitrag von DLMartin » 13.11.2004 19:58:53

Eine sehr gute Seite mit einfachen Beispielen findest Du unter
http://nehe.gamedev.net/

Ich weiss, dass ist nicht die Antwort auf Deine Frage, ABER lade Dir dort einmal die einfachen Beispiele herunter und probier die aus. Schau dir die Makefiles an, dort siehst Du welche Libs wie eingebunden werden müssen. Vermutlich machst Du das bei deinem Beispiel nicht.

Wie versuchts Du den geposteten Code den zu kompilieren?

hth
Martin

Benutzeravatar
se8i
Beiträge: 1017
Registriert: 08.11.2002 17:02:20
Wohnort: nähe Karlsruhe
Kontaktdaten:

Beitrag von se8i » 13.11.2004 22:51:09

achtung vermutung:
beim aufruf von gcc sollte in etwa sowas dabeistehen: "-lglu" Das sagt dem linker, welche libs er nehmen soll.
Jazz is not dead, it just smells funny.

Benutzeravatar
Deblix
Beiträge: 585
Registriert: 23.05.2003 17:33:48
Wohnort: Bremen

Beitrag von Deblix » 14.11.2004 13:58:39

Die Seite von NeHe ist echt spitze, habe ich auch schon zuvor mal angesehen.

Es war der "-lglut"-Parameter... jetzt läuft es super. Danke

Benutzeravatar
weedy
Beiträge: 585
Registriert: 02.11.2002 21:47:49
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Beitrag von weedy » 15.11.2004 16:47:23

Es gibt übrigens noch eine recht gute Beispielsammlung:

Package: mesademos

weedy.

Antworten