Hilfe mit GLUT Programmierung



  • mal nen beispiel für ne minimalistische qt3 anwendung mit opengl (aus dem kopf, garantier für nix ;)):

    #include <qgl.h>
    
    class MyOpenGL : public GLWidget
    {
    public:
     MyOpenGL(QWidget *parent = 0, const char *name = 0) : GLWidget(parent, name);
     void paintGL(); // <--- das ist die GL main loop
    }
    
    #include <qapplication.h>
    #include "myopengl.h"
    #include <gl/glut.h>
    
    int main(int argc, char **argv)
    {
     glutInit(&argc, argv); // glut initialisieren, am besten immer als erstes machen
     QApplication *app = new QApplication(argc, argv);
     MyOpenGL *gl = new MyOpenGL(); // neues gl widget
     app->setMainWidget(gl); // widget der qapp zuordnen
     gl->show(); // sichtbar machen ^^
     return app->exec(); // und application starten
    }
    

    wie man nun die paintGL methode zum updaten bringt kommt auf die applikation an. qt updatet immer dann, "wenn es nötig ist".

    entweder benutzt man nen timer für das updaten (s. qtdoc QTimer), wartet auf user inputs (s. qtdoc Events) oder haut den gl callback rein. letzeres benutz ich nie, da können dann andere helfen 😉



  • Danke für die Antworte. Nun arbeite ich nicht mit qt. Das Program ist rein C++. Ich suche nach einem Weg die glutmain-loop vom Programmlogik zu separieren.



  • GLUT hat doch 'nen Render- und ein Idle-Callback, was willst Du noch?! 😕



  • Sgt. Nukem schrieb:

    GLUT hat doch 'nen Render- und ein Idle-Callback, was willst Du noch?! 😕

    Ich schätzte mal er braucht noch sowas wie ein File-Ready-for-Read Callback oder so.



  • Eigentlich brauche ich Hilfe... GLUT blockiert alles was nicht mit Graphic zu tun hat. Dann wie gebe ich Daten in die Konsole ein? Vielleicht soll ich das API wechseln? Ich werde euch sehr dankbar sein, wenn sie mir mit etwas helfen.
    Das Idle-Callback ist nur eine Funktion, die mit der Visualizierung verbunden ist. Wie kann ich folgendes machen:
    1. Benutzer gibt in die Konsole "start" ein.
    2. Ein Fenster taucht auf
    3. Ein Paar Sachen werden gemalt (diese hängen von den Parametern von "start" Befehl ab)
    4. Nachdem die Sachen gemalt sind, kann der Benutzer wieder Anweisungen schreiben usw.
    Ist es jetzt aller Leute klar, was ich brauche?
    Wie sie sehen, es ist nicht kompliziert. Nun ist OpenGL eher nicht Objekt-Orientiert 😞
    Vielleicht ist es leichter mit MESA?



  • Zdravko schrieb:

    Eigentlich brauche ich Hilfe... GLUT blockiert alles was nicht mit Graphic zu tun hat. Dann wie gebe ich Daten in die Konsole ein? Vielleicht soll ich das API wechseln? Ich werde euch sehr dankbar sein, wenn sie mir mit etwas helfen.
    Das Idle-Callback ist nur eine Funktion, die mit der Visualizierung verbunden ist. Wie kann ich folgendes machen:
    1. Benutzer gibt in die Konsole "start" ein.
    2. Ein Fenster taucht auf
    3. Ein Paar Sachen werden gemalt (diese hängen von den Parametern von "start" Befehl ab)
    4. Nachdem die Sachen gemalt sind, kann der Benutzer wieder Anweisungen schreiben usw.
    Ist es jetzt aller Leute klar, was ich brauche?

    Was soll das denn für eine Konsole sein?!

    Meinst Du das Standard-Konsolenfenster von Windows (cmd.exe) bzw. 'ne UNIX-Shell? Oder läuft da Deine Anwendung schon (start hört sich so an)??

    Falls ersteres: Das geht nur mit Threads. Das hat auch nichts mit OpenGL, GLUT oder MESA zu tun. Wenn Du in der Haupt-main() eine Funktion o.ä. aufrufst die nicht zurückkehrt (Endlosschleife oder halt die GLUT main), dann ist die Konsole blockiert.

    Du kannst auch ohne Threads nicht mit scanf() auf Eingaben vom Nutzer warten, trotzdem aber Kram mit printf() ausgeben.

    Falls letzteres: Ich weiß nicht ob GLUT mehrere Fenster unterstützt...



  • Ok ok, danke sehr trotzdem... Ich benutze eine einfachere Bibliothek, wie Z.B. grx.



  • Zdravko schrieb:

    Danke für die Antworte. Nun arbeite ich nicht mit qt. Das Program ist rein C++. Ich suche nach einem Weg die glutmain-loop vom Programmlogik zu separieren.

    Qt verwendet OOP= C++

    GLUT verwendet prozedurales proggen = C



  • @shade37337: BTW auch mit C kann man OOP programmieren - nur weil es in C++ programmiert ist, uss es nicht OOP sein: http://turing.fh-landshut.de/~jamann/usop.html



  • // prevent multiply inclusion
    

    😉


Anmelden zum Antworten