Wo Aufsetzen bei Grafikprogrammierung



  • Danke schonmal.
    Also kann ich mir die Bibliothek schonmal sparen!?
    Dis ist dann nur noch ein Zusatz zur Vereinfachung!?



  • scheinbar haben alle Anfänger so ziehmlich das gleiche Problem 🙂
    Hallo erstmal,
    erstmal solltest du dich entscheiden ob du nur Programme für Windows oder Systemunabhängig schreiben willst.
    Das sollte nähmlich entscheiden ob du die DirectX Bibliothek oder die OpenGL Bibliothek nimmst.
    Windows -> DirectX (meine Empfehlung - kein muss)
    Systemunabhängig -> (OpenGL - ein muss da DirectX nur Windows unterstützt)

    Die Windows Api verwendet man bei Graphikanwendungen nur um ein Fenster zu erzeugen indas du dann mithilfe der oben gennanten APIs reinzeichnest.

    Falls du mit OpenGL weitermachen willst empfehle ich dir die Offizielle Seite zu besuchen da dort viele aktuelle Informationen zu finden sind. (Besonders weil sich dort in letzter Zeit (angeblich) viel getan hat.)

    Versuch erstal mit beiden APIs ein Dreieck darzustellen und schau dann welche der APIs dir von der Struktur her mehr zusagt.

    Oh das wichtigste hab ich ja glatt vergessen: meiner Meinung ist es sehr zu empfehlen die ganze Sache mit C++ im Hinterkopf anzugehen da sowohl DirictX als auch OpenGL und die WinApi und ich glaube auch die anderen Apis in den C Sprachen gehalten wurden.

    Gruß.



  • Balu Jr. schrieb:

    Danke schonmal.
    Also kann ich mir die Bibliothek schonmal sparen!?
    Dis ist dann nur noch ein Zusatz zur Vereinfachung!?

    Welche meinst du denn? Wenn du deine Primitiven selber zeichnest und deine Texturen selber decodierst, brauchst du gar keine von beiden. Und ja, beide sind zur Vereinfachung.



  • Du solltest dir überlegen was du machen willst. Die WinAPI ist Grundsätzlich erstmal nur fürs Fenster da ind em gezeichnet wird, bringt abe rnoch einige nette Funktionen mit (zB INIs auslesen).

    Und hier stellst sich die Frage was es sein soll, willst du Plattformunabhängig sein oder an Windows gebunden. Willst du eine Engine selbst machen, oder willst du nur Spiele machen, darüber musst du dir erstmal im Klaren sein.

    Plattformunabhängigkeit bedeutet OpenGL, wenn du eh nur für Windows entwickeln willst kannst du auch DirectX nehmen (wobei du dich heir entscheiden musst welche Version, da 9 und 19/11 sich unterscheiden vom Aufbau). Für beide Varianten gibt es gute Büche rund genug Infos im Netz.

    Möchtest du selbst eine Engine bauen, dann geht deine Reise dort los, willst du aber nur ein Spiel amchen dann kanst du auch ein Framework oder eine bestehende Engine benutzen auf die du dann Aufbaust, auch heir gibts genug Material im Netz.

    Wenn du dir darüber im Klaren bist kann man dir denke ich auch besser weiterhelfen.



  • 1. Ich möchte Plattformunabhängig programmieren.
    2. Bei allem was ich die letzten Wochen gelesen habe ist eine eigene Engine für den Hobbieprogrammierer der Supergau und ncht geeignet. Der Aufwand steht in keiner Relation zu irgendeinem privaten Ziel.
    3. Ich möchte so tief wie möglich ansetzen um alles was darüber ist (z.B. SDL über OpenGL) grundlegend zu verstehen. Also auch wie z.B. die Funktionen von SDL herkommen.

    Ich arbeite gerade die NeHe-Tutorials durch und stelle fest,dass die Funktionen von OpenGL eigentlich auch schon ganz komfortabel sind. Da ist ja schon vieles grundlegend mit drin!!! (Lichtberechnung, Blending und und und )
    Danke schonmal für die Hilfen,

    der jungfräuliche Balu



  • 2D oder 3D?
    Wenn 2D (meine Empfehlung am Anfang!), dann hängt die Bibliothek von der gewünschten Sprache ab.
    Sollte es C sein: SDL
    Sollte es C++ sein: SFML

    Bei beiden kannst du dir den Quellcode ansehen, um rauszufinden, wie es funktioniert. Dabei helfen bei SFML leichte OpenGL-Kenntnisse, da intern damit gearbeitet wird. Was SDL nutzt, weiß ich grad nicht.

    Wenn es 3D sein soll: Die NeHe-Tutorials hast du ja schon gefunden. Wenn es dir eher auf das Verständnis ankommt, bleib dabei. Wenn du schnell was auf den Bildschirm bekommen willst, hilft eine Engine. So z.B. Ogre3D oder IrrLicht. Beide abstrahieren den OpenGL-Kram und helfen dir, deine Models schnell auf den Bildschirm zu bringen.

    Kommt halt alles darauf an, wie du weiter vorgehen möchtest.



  • Ich wuerde fuer einen Anfaenger im HGE empfehlen. Habe auch irgendwo mal einen Vergleich von ein paar Sachen geschrieben. Aber durch deine (IMHO unnoetigen) Einschraenkungen faellt das wohl ehh weg fuer dich. f'`8k

    Autocogito

    Gruß, TGGC (Was Gamestar sagt...)



  • Danke,

    eigentlich hatte ich fürs erste ein interressantes 2D-Spiel gedacht.
    Doch wenn ich nun allein mit openGL arbeite merke ich so langsam,dann ist 2D fast nicht einfacher als 3D, da mann dann in einem 3D-Raum einfach nur die zKoordinatenachse konstant hällt.(Im Grunde bleibt es aber eh 3D) Vereinfachungen gibt es keine.



  • Balu Jr. schrieb:

    Danke,

    eigentlich hatte ich fürs erste ein interressantes 2D-Spiel gedacht.
    Doch wenn ich nun allein mit openGL arbeite merke ich so langsam,dann ist 2D fast nicht einfacher als 3D, da mann dann in einem 3D-Raum einfach nur die zKoordinatenachse konstant hällt.(Im Grunde bleibt es aber eh 3D) Vereinfachungen gibt es keine.

    Das stimmt nicht. Vllt solltest Du einfach eine Orthographisce Ansicht erstellen anstelle einer perspektivischen mittel gluOrtho().
    Und ich empfehle Dir für OpenGL SDL zu verwenden fürs Fenstermanagement. Deutlich angenehmer. SFML ist ganz nett, ich benutz es aber nicht weil das anscheinend ein Memory Leak hat.. zumindest hat das blosse erstellen eines Fensters (Nein, kein Zeiger) bei Visual Studio viele Alarmglocken nach dem beenden geläutet.

    Markante Stelle zu gluOrtho aus meinem Code:

    void NLWindowGL::initGL2D(int w, int h)
    {
        // Set Viewport
        glViewport(0, 0, w, h);
    
        // Set OpenGL-Options
        glClearDepth(1.0f);
        glDepthFunc(GL_LESS);
        glEnable(GL_DEPTH_TEST);
        glDepthMask(TRUE);
        glShadeModel(GL_SMOOTH);
        glEnable(GL_CULL_FACE);
        glCullFace(GL_BACK);
    
        // Reset Projection-Matrix
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
    
        // Set Viewmode
        // OpenGL-Specific: glOrtho(0, w, 0, h, -100.0f, 100.0f);
        /*Windows-Mode: */ glOrtho(0, w, h, 0, -100.0f, 100.0f);
    
        // Reset Modelview-Matrix and leave it.
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
    
    }
    

    rya.



  • Scorcher24 schrieb:

    Balu Jr. schrieb:

    Danke,

    eigentlich hatte ich fürs erste ein interressantes 2D-Spiel gedacht.
    Doch wenn ich nun allein mit openGL arbeite merke ich so langsam,dann ist 2D fast nicht einfacher als 3D, da mann dann in einem 3D-Raum einfach nur die zKoordinatenachse konstant hällt.(Im Grunde bleibt es aber eh 3D) Vereinfachungen gibt es keine.

    Das stimmt nicht. Vllt solltest Du einfach eine Orthographisce Ansicht erstellen anstelle einer perspektivischen mittel gluOrtho().

    Deswegen verhaelt sich der Rest immer noch genauso wie OpenGL bei 3D Anwendungen. f'`8k

    Autocogito

    Gruß, TGGC (Was Gamestar sagt...)


Anmelden zum Antworten