PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : OpenGL: Kompilieren



bischi
24-05-2005, 18:24
Vielleicht mag ich C++ einfach zu wenig... Aber: Ich wollte mal einfach so zum Spass anfangen, ein wenig OpenGL zu programmieren. Hab mir das offizielle "Buch" heruntergeladen, Beispieldatei geschrieben und versucht, zu kompilieren. Daran bin ich allerdings gescheitert:

Installiert sind:

freeglut3
xlibmesa und weitere.

Hier das Beispiel:


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

void display(){
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();
}

void init(){
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);
}

int main(int argc, char** argv){
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(500,500);
glutCreateWindow("Fenstertitel");
init();
glutDisplayFunc(display);
glutMainLoop();
return 0;
}



Beim Kompilieren mittels

g++ HelloWorld.c

kommt ne Menge Fehlermeldungen, mit denen ich leider nichts anfangen kann.

OpenGL2$ g++ HelloWorld.c
/tmp/ccfzKDLz.o(.text+0xe): In function `display()':
: undefined reference to `glClear'
/tmp/ccfzKDLz.o(.text+0x2d): In function `display()':
: undefined reference to `glColor3f'
/tmp/ccfzKDLz.o(.text+0x39): In function `display()':
: undefined reference to `glBegin'
/tmp/ccfzKDLz.o(.text+0x58): In function `display()':
: undefined reference to `glVertex3f'
/tmp/ccfzKDLz.o(.text+0x77): In function `display()':
: undefined reference to `glVertex3f'
/tmp/ccfzKDLz.o(.text+0x96): In function `display()':
: undefined reference to `glVertex3f'
/tmp/ccfzKDLz.o(.text+0xb5): In function `display()':
: undefined reference to `glVertex3f'
/tmp/ccfzKDLz.o(.text+0xba): In function `display()':
: undefined reference to `glEnd'
/tmp/ccfzKDLz.o(.text+0xbf): In function `display()':
: undefined reference to `glFlush'
/tmp/ccfzKDLz.o(.text+0xf0): In function `init()':
: undefined reference to `glClearColor'
/tmp/ccfzKDLz.o(.text+0xfc): In function `init()':
: undefined reference to `glMatrixMode'
/tmp/ccfzKDLz.o(.text+0x101): In function `init()':
: undefined reference to `glLoadIdentity'
/tmp/ccfzKDLz.o(.text+0x12d): In function `init()':
: undefined reference to `glOrtho'
/tmp/ccfzKDLz.o(.text+0x152): In function `main':
: undefined reference to `glutInit'
/tmp/ccfzKDLz.o(.text+0x15e): In function `main':
: undefined reference to `glutInitDisplayMode'
/tmp/ccfzKDLz.o(.text+0x172): In function `main':
: undefined reference to `glutInitWindowSize'
/tmp/ccfzKDLz.o(.text+0x17e): In function `main':
: undefined reference to `glutCreateWindow'
/tmp/ccfzKDLz.o(.text+0x18f): In function `main':
: undefined reference to `glutDisplayFunc'
/tmp/ccfzKDLz.o(.text+0x194): In function `main':
: undefined reference to `glutMainLoop'
collect2: ld returned 1 exit status


Muss ich da was linken? Und wenn ja, was? Hab zwar gemeint, ich hätte c++ so halbwegs im Griff, aber...

MfG Bischi

klewan
24-05-2005, 18:34
g++ -lglut -lGL Main.cpp

denk ich mal

peschmae
24-05-2005, 18:34
Klar musst du da linken. In den Includes steht ja nur die Deklaration von Funktionen - nix definition. :)

Was linken? z.B. die Bibliotheken die zu den geincludeten Headern gehören - hier libglut.
Also konkret krass:
g++ test.cpp -o test -lglut

MfG Peschmä

bischi
24-05-2005, 19:11
Voll Krass - jetzt läufts!!!! :D :D :D :D

Ich habs mir noch fast gedacht, dass ich was linken muss - hab das jedoch nur mal mit lokalen Paketen gemacht... Naja: Wieder was gelernt - Merci an beide!

MfG Bischi

dra
24-05-2005, 19:17
Glaub für meine Frage wäre nen neuer Thread überflüssig:

Wie kann ich (per Xlib) in meinem OpenGL-Fenster den Mauszeiger ausblenden?

Gruß,
dra

peschmae
24-05-2005, 19:56
Das sollte eigentlichw ie bei jedem anderen (XLib-) Programm auch gehen: http://users.actcom.co.il/~choo/lupg/tutorials/xlib-programming/xlib-programming-2.html#cursors_assign

MfG Peschmä

localhost
25-05-2005, 13:04
#include <stdio.h>
#include <stdlib.h>
#include <GL/glx.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <X11/extensions/xf86vmode.h>
#include <X11/keysym.h>

void display(void)
{
// clear all pixels
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();
}

void init (void)
{
// clearing background + color
glClearColor(0.0, 0.0, 0.0, 0.0);

// initialize viewing values
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
}

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


wenn ich das kommpeliren will kommt das




gcc opengl.c -o opengl -L/usr/X11R6/lib -lGL -lGLU -lXxf86vm
opengl.c: In function `main':
opengl.c:39: Fehler: »GLUT_SINGLE« nicht deklariert (erste Benutzung in dieser Funktion)
opengl.c:39: Fehler: (Jeder nicht deklarierte Bezeichner wird nur einmal aufgeführt
opengl.c:39: Fehler: für jede Funktion in der er auftritt.)
opengl.c:39: Fehler: »GLUT_RGB« nicht deklariert (erste Benutzung in dieser Funktion)

7.e.Q
26-05-2005, 06:52
Füg mal oben noch



#include <GL/glut.h>


mit ein!

localhost
26-05-2005, 15:03
#include <GL/glut.h>

hab ich nicht


Füg mal oben noch



#include <GL/glut.h>


mit ein!

peschmae
26-05-2005, 16:41
Dann installiers... - und vergiss nicht die oben erwähtne libglut zu linken.

MfG Peschmä

localhost
02-06-2005, 12:15
Aber hier
http://www.mrunix.de/forums/showthread.php?t=32586
Wird davon angeraten glut zu benutzen

peschmae
02-06-2005, 16:42
Dann verwende es halt nicht. Ich verstehe dich nicht ganz. Erst postest du Code der Glut benutzt und willst den kompilieren und nachher findest du du möchtest lieber kein Glut... :confused:

A propos Glut-Lizenz was ja angekreidet wurde - in Debian wird freeglut verwendet und das ist unter einer Lizenz die praktisch alles erlaubt...

MfG Peschmä

localhost
02-06-2005, 16:51
Ich wuste ja nicht das dass dafür gebraucht wird ichwerfro wenn ich zumindes mal ein gl fenster hinbekommen würde
Ich find nahezu keine deutschen tuterils und das buch was ich habe ist für visel basig halt für das komiche betribssystem von microsoft da.
Und dort wird auch glut benutz dan werde ich das woll auch machen

dra
04-06-2005, 21:03
Localhost:

Auch wenn's aus der MSDN-Bibliothek ist, ich fand's mit Abstand eines der kompaktesten Beispiele für ein GLX-Programm: http://msdn.microsoft.com/library/en-us/opengl/oglport_0b71.asp?frame=true

Cheers,
dra

localhost
05-06-2005, 12:25
Cool thx
Ich hab auch versucht glut zu installiren also ich hab nur das rpm packes installir bei fedora core3 aber das hatt nicht geklabt.
Ich such mal weiter im notfall kompelir ich das selber wen ich es finde

Localhost:

Auch wenn's aus der MSDN-Bibliothek ist, ich fand's mit Abstand eines der kompaktesten Beispiele für ein GLX-Programm: http://msdn.microsoft.com/library/en-us/opengl/oglport_0b71.asp?frame=true

Cheers,
dra

localhost
09-06-2005, 12:15
WOher bekomme ich den gult für linux ??
Ich hab bei rpmfind ein rpm packes das gult heist auf fedora core installer aber ich hab die GL/gult.h nicht.

peschmae
09-06-2005, 12:31
Du brauchst halt noch die Entwicklerpakete die dazu passen - glut-dev oder glut-devel oder so.

MfG Peschmä