OpenGL unter Bloodshed Dev C++



  • Hallo,

    ich versuche gerade OpenGL, Glu und Glut unter Dev C++ ans Laufen zu bekommen, aber der Compiler meckert dauernd, dass er gewisse Funktionen nicht finden könne. Dabei habe ich die Header alle eingefügt (OpenGl, glu, glut) und auch die Libraries gelinkt. Trotzdem will es nicht funktionieren.

    Da ich nicht so genau weiß, was Glut und Glu eigentlich machen, stellt sich mir die Frage ob sie nötig sind. Zumindest werden sie in OpenGL Tutorials immer verwendet.

    Bin dankbar für jede Hilfe.

    Danke



  • Glu und Glut ist was für Weicheier! Die brauchst du nicht. Es sei denn du benutzt Funktionen daraus, zu erkennen an den prefixen glu bzw. glut.

    Welche funktionen findet er denn nicht?



  • Abbadon schrieb:

    Glu und Glut ist was für Weicheier! Die brauchst du nicht. Es sei denn du benutzt Funktionen daraus, zu erkennen an den prefixen glu bzw. glut.

    Bei GLUT stimmte ich ja noch zu (dort besser freeglut benutzen, da im Gegensatz zu GLUT weiterentwickelt wird), aber GLU ist ein elementarer Bestandteil des OpenGL Systems - es nicht zu benutzen wäre Unsinn. gluScaleImage und gluBuild2DMipmaps sind recht praktisch, wenn man entweder keinen automatischen Mipmap Support hat oder NPOT Texturen laden will, wenn die Hardware keine NPOTs unterstützt oder sie es doch tut, aber nur mit Einschränkungen (NV/EXT_texture_rectangle was ja bekanntlich keine Mipmaps unterstützt).

    cya
    liquid



  • Danke euch beiden erst einmal. Was genau machen denn GLU und GLUT? Ich habe dabisher keine genauen Infos finden können. Ich habe nur gelesen, das GLU z.B. Matrixberechnungen stark vereinfacht, was ja nicht schlecht sein kann.

    Was ist eigentlich Glaux? Die Library habe ich, aber der Header fehlt aus irgendeinem Grund. Brauche ich Glaux in irgendeiner Weise, oder geht das auch ohne? Ausserdem fehlen mir auch hierzu die Header.

    Die Funktionen, die angeblich nicht existieren sind z.B. diese:

    main.o(.text+0x15):main.cpp: undefined reference to __glutInitWithExit@12' main.o(.text+0x32):main.cpp: undefined reference to__glutCreateWindowWithExit@8'
    main.o(.text+0x50):main.cpp: undefined reference to `__glutCreateMenuWithExit@8'

    Glut Header und Library existieren aber!

    Also kann ich OpenGL benutzen ohne Glut und Glaux und trotzdem den vollen Funktionasumfang nutzen? wie ersetzt man dann z.B. gluLookAt(...) ?

    Danke



  • Abracadabra schrieb:

    Was genau machen denn GLU und GLUT? Ich habe dabisher keine genauen Infos finden können. Ich habe nur gelesen, das GLU z.B. Matrixberechnungen stark vereinfacht, was ja nicht schlecht sein kann.

    OpenGL ist eine reine Grafik-Schnittstelle, auf ziemlich tiefem Level. [EDIT: <-- Muß natürlich "hohem" heissen...]
    Sie hat zunächst einmal keine Verbindung zu irgendeinem Betriebssystem.
    Unter Windows muß man daher mit den WGL Funktionen ein Windows-Fenster an OpenGL binden, unter Linux mit GLX, unter MacOS mit CLX, etc. pp

    GLUT ist das OpenGL Utility Toolkit, daß einem dem Umgang mit GLX und Co. abnimmt. Es kümmert sich selber um die richtigen Funktionen für das jeweilige Betriebssystem, um dieses an OpenGL zu "binden". Zudem bietet es AFAIK rudimentäre Maus-Unterstützung etc.
    Es wird aber nicht mehr weiter entwickelt, ist veraltet, und taugt nur für Demos oder Einsteiger.

    GLU ist die OpenGL Utility Library. Sie enthält Funktionen, die immer wieder gebraucht werden, von OpenGL aber nicht direkt "unterstützt" werden. Sie ruft dazu allerdings auch lediglich nur OpenGL-Funktionen auf, man könnte also auch komplett auf sie verzichten, und alles selber machen. Aber warum sollte man?
    Funktionen von GLU: http://pyopengl.sourceforge.net/documentation/manual/reference-GLU.html

    So könnte man gluLookAt() z.B. auch mit vielen Matrix-Operationen direkt auf OpenGL-Basis ersetzen.
    GLU bietet Textur-Funktionen, Umgang mit NURBS, und kann z.B. konkave Objekte triangulieren.

    GLAUX ist die OpenGL Auxiliary Library, und bietet wie GLUT z.B. Fenstererstellung, und ein paar Funktionen zum äußerst einfachen Umgang mit OpenGL. Es wurde AFAIK nur für das "OpenGL Red Book" entwickelt, um so schnell wie möglich was auf den Schirm zu kriegen, und nicht vom eigentlichen Lernziel abzulenken.

    Sowohl GLUT als auch GLAUX würde ich IMHO später nicht mehr verwenden. GLU hingegen schon.

    Abracadabra schrieb:

    Was ist eigentlich Glaux? Die Library habe ich, aber der Header fehlt aus irgendeinem Grund. Brauche ich Glaux in irgendeiner Weise, oder geht das auch ohne? Ausserdem fehlen mir auch hierzu die Header.

    S.o.!
    Natürlich geht das auch ohne.
    -> google

    Abracadabra schrieb:

    Die Funktionen, die angeblich nicht existieren sind z.B. diese:

    main.o(.text+0x15):main.cpp: undefined reference to __glutInitWithExit@12' main.o(.text+0x32):main.cpp: undefined reference to__glutCreateWindowWithExit@8'
    main.o(.text+0x50):main.cpp: undefined reference to `__glutCreateMenuWithExit@8'

    Glut Header und Library existieren aber!

    Dann hast Du die glut.lib nicht gelinkt! 💡
    Projekt -> Projektoptionen -> Parameter -> Linker -> "-lglut" hinzufügen...

    Abracadabra schrieb:

    Also kann ich OpenGL benutzen ohne Glut und Glaux und trotzdem den vollen Funktionasumfang nutzen? wie ersetzt man dann z.B. gluLookAt(...) ?

    Mit viel Matrizen-Mathe!
    Such' Dir ein beliebiges Tutorial aus, daß Dir Viewspace-Transformation erklärt. 💡



  • Sgt. Nukem schrieb:

    Glut Header und Library existieren aber!

    Dann hast Du die glut.lib nicht gelinkt! 💡
    Projekt -> Projektoptionen -> Parameter -> Linker -> "-lglut" hinzufügen...
    [/quote]

    Danke für Deine ausführliche Antwort! Das ist ja das Problem ich habe definitiv -lglut in den Linker Einstellungen drin!

    Allerdings musste ich Glut "nachinstallieren", da es nicht bei den Headern dabei war. Vielleicht habe ich eine zu alte Version oder so. Kann das evtl. sein?

    Dies sind übrigens noch einige weitere Fehler, die ich bekomme :

    Init.o(.text+0x321):Init.cpp: undefined reference to ChoosePixelFormat@8' Init.o(.text+0x35b):Init.cpp: undefined reference toSetPixelFormat@12'
    Main.o(.text+0x27b):Main.cpp: undefined reference to `SwapBuffers@4'

    Sind das nicht Standard OpenGl Funktionen?

    Danke



  • BTW: Dev-Cpp hat unter Neues Projekt->Multimedia->OpenGL ein Standard-OpenGL Projekt. Funktioniert das?



  • Sgt. Nukem schrieb:

    Dann hast Du die glut.lib nicht gelinkt! 💡
    Projekt -> Projektoptionen -> Parameter -> Linker -> "-lglut" hinzufügen...

    Danke für Deine ausführliche Antwort! Das ist ja das Problem ich habe definitiv -lglut in den Linker Einstellungen drin!

    Allerdings musste ich Glut "nachinstallieren", da es nicht bei den Headern dabei war. Vielleicht habe ich eine zu alte Version oder so. Kann das evtl. sein?

    Dies sind übrigens noch einige weitere Fehler, die ich bekomme :

    Init.o(.text+0x321):Init.cpp: undefined reference to ChoosePixelFormat@8' Init.o(.text+0x35b):Init.cpp: undefined reference toSetPixelFormat@12'
    Main.o(.text+0x27b):Main.cpp: undefined reference to `SwapBuffers@4'

    Sind das nicht Standard OpenGl Funktionen?

    Danke[/quote]



  • Abracadabra schrieb:

    Init.o(.text+0x321):Init.cpp: undefined reference to ChoosePixelFormat@8' Init.o(.text+0x35b):Init.cpp: undefined reference toSetPixelFormat@12'
    Main.o(.text+0x27b):Main.cpp: undefined reference to `SwapBuffers@4'

    Sind das nicht Standard OpenGl Funktionen?

    nur swapbuffers rest ist windows gdi
    noch mitlinken "-lgdi32" "-lopengl32"



  • Ich hatte schon mal eine Methode gepostet, fehlende Libs zu identifizieren...

    Bye, TGGC \-/



  • -lgdi32 mit zu linken hat das Problem gelöst, aber jetzt habe ich immer ein Konsolenfenster plus ein Windowsfenster mit dem OpenGL DC drin. Hängt das mit dem lgdi32 zu tun, oder liegt das an dem Tutorial? Bei diesem war nämlich ein Executable dabei, bei dem kein Konsolenfenster kam.

    Danke!


Anmelden zum Antworten