[OpenGL] glEasy2D + glCube Klasse

  • Hey Leute,
    wieder einmal stelle ich in C++ eine vereinfachte Methode zum zeichnen vor.
    Diesmal handelt es sich um (vielleicht werden es mal mehr) 5 Funktionen für 2D und eine Cube-3D Klasse.
    glEasy2D ist folgendermaßen aufgebaut:

    Code
    #include "glEasy2D.h"
    glEasy2D_FillRect(iX1, iY1, iZ1, iX2, iY2, iZ2, iX3, iY3, iZ3, iX4, iY4, iZ4); //Zeichnet ein ausgefülltes Viereck
    glEasy2D_DrawRect(/*siehe Parameter von FillRect*/); //Zeichnet ein Viereck, nur die Kanten
    glEasy2D_FillTriangle(iX1, iY1, iZ1, iX2, iY2, iZ2, iX3, iY3, iZ3); //Zeichnet ein ausgefülltes Dreieck
    glEasy2D_DrawTriangle(/*siehe Parameter von FillTriangle*/); //Zeichnet ein Dreieck, nur die Kanten
    glEasy2D_DrawLine(iX1, iY1, iZ1, iX2, iY2, iZ2); //Zeichnet eine Linie


    Das war soweit erstmal glEasy2D

    So, jetzt kommen wir zur CubeKlasse.
    Die Cube Klasse ist folgendermaßen aufgebaut:

    Das waren jetzt soweit erstmal die ganzen Funktionen.
    Anbei noch ein Screen wie das ganze aussehen kann:
    [Blockierte Grafik: http://xorianator.xo.funpic.de/XorianatorDev/DATA/glEasy2D.png]
    Download unter KLICK MICH (Sollte der Link davor nicht gehen klicke bitte mich)

    Das gesamte Copyright liegt bei mir und ich möchte vor weitergeben der Funktionen gefragt werden !
    Verbesserungen, Vorschläge & Kritik ist immer gern gesehen :)

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

    2 Mal editiert, zuletzt von Xorianator (5. Mai 2012 um 19:03)

  • Hi,

    gute Idee.


    Als Verbesserungsvorschlag, bzw. Änderung würde ich dir empfehlen statt int einen
    selbst definierten Typ a la "enum GLEASY2D_RESULT" oder dergleichen zu return'en.

    Wichtig: Falls du vorhast glEasy2D nach AutoIt zu portieren, also per "DllCall()",
    solltest du in die enum einen ungenutzten Wert, z.b. "__GLEASY2D_RESULT__FORCE__DWORD__ = 0x7fffffff" einsetzen.
    Dies führt dazu, dass der Compiler den enum-Typ als 32-Bit Größe kompiliert wird.

  • Ich hatte es nicht vor zu portieren ^^
    Da ich mich mit DLL Programmierung in C++ aktuell noch nicht beschäftigt habe, aber in OpenGL wird eh jeder Typ als 32 Bit portiert, da OpenGL auf einer 32-Bit Lib beruht ^^

    Zu dem Enum ... Naja, an sich reicht der int ja, im Prinzip hast du aber auch recht.
    Dennoch denke ich dass ich es vllt mal mit den Tagen portieren werde, mal gucken :)
    Schön dass du es dir angeguckt hast :)

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

  • Der enum-Typ wäre nur der Übersicht halber gedacht, so dass man die Zahlen nicht auswendig lernen muss sondern einfach nur der Text (Konstantenname).

    Zitat

    ... in OpenGL wird eh jeder Typ als 32 Bit portiert, da OpenGL auf einer 32-Bit Lib beruht


    Wie meinst du das?
    Wenn du unsigned char return'st ist die Größe des Rückgabewerts 1 Byte groß oder irre mich?

    Da AutoIt den return-Typ "enum" nicht kennt, wie sollte es auch, wäre es wichtig die enum-Größe konstant zu halten (32 Bit als Beispiel).

    DllProgrammierung/Exportierung ist recht einfach:

    In deinem Header:

    Spoiler anzeigen
    Code
    __declspec(dllexport)   //wird nur gebraucht, falls der Compiler eine .lib Datei anlegen, soll. Wird benötigt, falls du exportierte Dll-Funktionen ohne "GetProcAdrs()" aufrufen möchtest.
    extern "C"
    return type
    __stdcall
    function-name (parameter-list);

    In deiner .cpp-Datei:

    Spoiler anzeigen
    Code
    __declspec(dllexport)   //wird nur gebraucht, falls der Compiler eine .lib Datei anlegen, soll. Wird benötigt, falls du exportierte Dll-Funktionen ohne "GetProcAdrs()" aufrufen möchtest.
    extern "C"
    return type
    __stdcall
    function-name (parameter-list)
    {
            //hier die Implermentierung
    }

    Wichtig ist, dass du Funktionen, die als extern "C" deklariert sind, nicht überladen kannst.

    EDIT:
    Ebenso kann es sein, dass manche Compiler trotz extern "C" die Exportfunktionsnamen ein wenig umbennen.
    Aus "MyDllExport" kann also "MyDllExport@4" werden.
    Um trotzdem an die richtigen Namen zu kommen, empfehle ich dir ein Programm, wie DllExplorer, welches dir alle Funtionen einer Dll aufzeigt.

    4 Mal editiert, zuletzt von Ealendil (6. Mai 2012 um 19:07)

  • Zu dem Uchar - ups, ja mein fehler :S

    Das es so einfach ist wusste ich gar nicht. .. Jeah :D

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

  • Gun-Food 5. Februar 2024 um 14:45

    Hat das Thema geschlossen.
  • Gun-Food 5. Februar 2024 um 14:45

    Hat das Thema geöffnet.