frankx: opengl - datenformat 3D grafik - c/c++

Ahoi,

in der Schul-Ag hat ein Schüler das dff-Format von GTA (grand theft auto) http://de.gta.wikia.com/wiki/DFF analysiert und kann dies nun mittels opengl-Funktionen anzeigen.

Seinen Erklärungen konnte ich der Struktur nach noch nicht ganz folgen, beim Code blieben wir vorerst an Einzelpunkten wie Details des Auslesens hängen.

Ich versuchte hier meinen Teil dazu beizusteuern, indem ich die groben Arbeitsschritte abstrahiere. Zum Auslesen gibt es 4 Dateien, von denen die ersten drei die Zusammenhänge von Bildnamen, Texturen und nochwas herstellen, und schlussendlich die Position und Länge in der eigentlichen Bilddatenbank (ein großes File mit allen Bilder drinne) hergeben.

Die 3D-Objekte sind dort mit Koordinatenpunkten verzeichnet (Texturen lass ich mal weg erstmal). Floats, 4 byte für je ein Koordinate.

Die Verbindung zu opgengl fehlt mir noch: womit muss man opengl "füttern" (mit was für einem Datenformat) dass nachher was korrektes bei rauskommt? Diese Funktion sie noch unübersichtlich, meinte der Schüler. Ich meinte, ich würde zum Verständnis gerne einmal ein paar banale Koordinaten quasi per Hand in opengl füttern, um dessen Funktionweise zu kapieren.

Denn die Konvertierung von dff ist ja wohl im Grunde "nur" eine Umstellung der in der dff-Datei zur Verfügung gestellten Daten damit opgengl damit was anfangen kann, oder?

Es geht mir hierbei um Grundverständnis und dann auch um Codeoptimierung. Schüler hat bisher in C geschrieben und überlegt, das in C++ umzuschreiben.

Dank und Gruß,

frankx

  1. Die Umstellung auf C++ dürfte letztlich zwar mehr Übersichtlichkeit, aber wenig Geschwindigkeitszuwachs bringen. Solange Du nicht inline-Assembler für die wesentlichen Konvertierungen einbringen kannst, solltest Du erst einmal auf das Grundverständnis abzielen.

    Hier findest Du eine Liste mit englischen Tutorials zu OpenGL.

    Gruß, LX

    --
    RFC 1925, Satz 6: Es ist einfacher, ein Problem zu verschieben (...), als es zu lösen.
    1. Ahoi,

      Die Umstellung auf C++ dürfte letztlich zwar mehr Übersichtlichkeit, aber wenig Geschwindigkeitszuwachs bringen.

      Erstmal Codestrukturierung. Und Sprachenvergleich.

      Solange Du nicht inline-Assembler für die wesentlichen Konvertierungen einbringen kannst, solltest Du erst einmal auf das Grundverständnis abzielen.

      Verständnisproblem: "solange du nicht inline-Assembler einbringen kannst"? Das könnte man doch dann immer noch, oder? Es ist schon recht lahm auf dem Schulrechner, aber darum ging es jetzt erstmal nicht, erstmal kapieren, dann verschnellern hätte ich gedacht. An welchen Stellen wäre den Inlineassembly ratsam? Wird aus C nicht sowieso erstmal Assembler?

      Dank und Gruß,

      frankx

      1. Das schon, aber wenn man langsame Fließkomma-Operationen durch schnelle Fixed-Point-Assembler-Funktionen ersetzen kann, ist noch etwas an Optimierung drin - zumindest machen es die großen 3D-Engine-Hersteller so.

        Gruß, LX

        --
        RFC 1925, Satz 6: Es ist einfacher, ein Problem zu verschieben (...), als es zu lösen.
  2. @@frankx:

    Die Verbindung zu opgengl fehlt mir noch: womit muss man opengl "füttern" (mit was für einem Datenformat) dass nachher was korrektes bei rauskommt?

    Bei OpenSG kann man direkt VRML-Modelle als Knoten in den Szenegraphen einbinden; http://www.3dsource.de/deutsch/vrml.htm lässt mich vermuten, dass das bei OpenGL mit etwas mehr Aufwand verbunden ist.

    Aber die Konvertierung von DFF in VRML sollte doch ein gangbarer Weg sein, oder?

    Live long and prosper,
    Gunnar

    --
    Das einzige Mittel, den Irrtum zu vermeiden, ist die Unwissenheit. (Jean-Jacques Rousseau)
    1. Ahoi,

      @@frankx:

      »» Die Verbindung zu opgengl fehlt mir noch: womit muss man opengl "füttern" (mit was für einem Datenformat) dass nachher was korrektes bei rauskommt?

      Bei OpenSG kann man direkt VRML-Modelle als Knoten in den Szenegraphen einbinden; http://www.3dsource.de/deutsch/vrml.htm lässt mich vermuten, dass das bei OpenGL mit etwas mehr Aufwand verbunden ist.

      "Vielleicht habt ihr schon festgestellt, dass das Programmieren mit OpenGL doch ziemlich zeitaufwendig ist, da jedes einzelne Objekt erstmal bis ins kleinste beschrieben werden muss."

      Diese "bis in kleinste beschrieben" müsste ich dann mal ausrecherchieren.

      Aber die Konvertierung von DFF in VRML sollte doch ein gangbarer Weg sein, oder?

      Bestimmt, denn schlussendlich geht es ja "nur" um eine Konvertierung. Da der Schüler die relevanten Daten ja bereits auslesen kann, kann man sich ja überlegen, ob man das eben "bis ins kleinste beschrieben" an OpenGL geben möchte oder eben ein VRML herzustellen, was dann enbloc verfütter werden kann.

      Dank und Gruß,

      frankx