Modellklasse mit c++ und OpenGL - Blender Exporter Script und Model-Viewer



  • Naja, mein Fahrplan sah eigentlich so aus, dass ich mir ein geeignetes Format für die Daten ausdenke, und dann ein Programm schreibe, dass solche Daten aus einer Datei, die ich mit Blender abspeichere auslese und in mein Format wandle. Dann macht es auch keine Probleme mehr das ganze fest zu codieren oder? 😕
    Und das Risiko meinem Freund erklären zu müssen, wie man Primitive mit Blender macht gehe ich ein 🙂 (Wenn du meine Freunde kennen würdest *g*)



  • Isodrink schrieb:

    Naja, mein Fahrplan sah eigentlich so aus, dass ich mir ein geeignetes Format für die Daten ausdenke, und dann ein Programm schreibe, dass solche Daten aus einer Datei, die ich mit Blender abspeichere auslese und in mein Format wandle. Dann macht es auch keine Probleme mehr das ganze fest zu codieren oder? 😕

    Was versprichst du dir davon, außer dass du Flexibilität aufgibst? Deine Daten müssten doch eh in eine Datenstruktur rein. Wenn du willst, kannst du deine Datei ja so gestalten, dass die Daten in einem Rutsch einfach nur in die Struktur rein kopiert werden müssen.



  • Es ist im Prinzip egal, da die Daten hinterher sowieso durch den Arbeitsspeicher gejagt werden. Wird beides keine Auswirkungen auf die Performance haben...
    Zumindest nicht bei kleinreren Framework's...



  • Gut nehmen wir an, ich schreibe die Positionen von Verts, Texturen, Farben und Knochen in eine txt Datei oder so.
    Wie bekomme ich daraus dann ein Objekt?



  • Isodrink schrieb:

    Gut nehmen wir an, ich schreibe die Positionen von Verts, Texturen, Farben und Knochen in eine txt Datei oder so.
    Wie bekomme ich daraus dann ein Objekt?

    Ich hab zwar nicht alles gelesen aber:
    Schreib dir doch einfach einen Loader.
    Dem übergibst du den Pfad der Datei und gibt nen Pointer auf das von dir gewünschte Objekt zurück.
    (Einfach alles auslesen und dann damit ein neues Objekt erstellen...)


  • Mod

    bei nehe gibt es einige tutorials dazu, mach dir das leben einfach und lies sie durch 😉



  • Gut nehmen wir an, ich schreibe die Positionen von Verts, Texturen, Farben und Knochen in eine txt Datei oder so.
    Wie bekomme ich daraus dann ein Objekt?

    Ganz einfach, du legst dir eine genaue Struktur an, beispielsweise:

    2 3 2 0 1
    

    2, 3 und 2 wären beispielsweise die x, y, z-Koordinaten die du ausliest. 0 und 1 sind zum Beispiel die Texturkoordinaten. Kannste so machen, lieste einfach ein und verarbeitest jede Zeile. Das war's im Prinzip schon, müsste bei nehe Tutorial 6 oder 8 sein.



  • Das ich einen Loader schreiben kann und alle Daten in das Programm einlesen kann ist mir schon klar 😉
    Nur wie erzeuge ich dann daraus eine Klasse, von der ich dann Istanzen erzeugen kann? Meiner Meinug nachgeht das nur mit einer Scriptsprache, aber ich lasse mich natürlich gerne korrigieren 🙂



  • Wozu willst du von dieser Klasse dann noch Instanzen erzeugen?
    Wenn das Model einmal im Speicher liegt, reicht das doch.



  • Naja, wenn ich zb. für ein Tower-Defence Spiel oder so, Einheiten mach, brauche ich nicht nur eine, sondern mehrere. Jede dieser Instanzen hat dann die gleichen Eigenschaften, jede aber andere Werte, wie zB. Lebenspunkte.
    Mir ist allerdings schon eine Idee gekommen, wie ich das machen könnte......mal sehen 🙂



  • Aber was haben denn bitte Eigenschaften wie Lebenspunkte etc. mit dem 3D-Modell an sich als Model zu tun? Das bleibt doch immer gleich, also musst du dieses ja nur einmal laden.



  • Das ich einen Loader schreiben kann und alle Daten in das Programm einlesen kann ist mir schon klar 😉
    Nur wie erzeuge ich dann daraus eine Klasse, von der ich dann Istanzen erzeugen kann? Meiner Meinug nachgeht das nur mit einer Scriptsprache, aber ich lasse mich natürlich gerne korrigieren 🙂

    Ich glaube du hast die Idee dahinter noch nicht so ganz verstanden.

    Isodrink schrieb:

    Naja, wenn ich zb. für ein Tower-Defence Spiel oder so, Einheiten mach, brauche ich nicht nur eine, sondern mehrere. Jede dieser Instanzen hat dann die gleichen Eigenschaften, jede aber andere Werte, wie zB. Lebenspunkte.
    Mir ist allerdings schon eine Idee gekommen, wie ich das machen könnte......mal sehen 🙂

    In der Datei stehen NUR die Daten für Vertices und Texturkoordinaten.
    Also z.B.:

    10 345 12 0 0
    

    Mehr nicht.
    Und du baust dir jetzt einfach einen Loader der die Daten Zeile für Zeile ausliest und in irgendeiner Struktur abspeichert.
    Somit hast du dein 3D Model geladen und kannst dann alles damit machen, was du willst.
    Wenn du jetzt z.B. bei einem Towerdefensegame die Gegner darstellen willst, lädst du einmal am Anfang das Model und speicherst es in (z.b.) einer EnemyManager Klasse die alle Gegner in einer Liste verwaltet. Wenn du jetzt alles rendern willst musst du nur das Model nach den Daten der einzelnen Gegner ausrichten und renderst es einfach.
    Das Model selbst hat rein gar nichts mit Lebenspunkten, Koordinaten, Waffen oder sonstwas zu tun.
    Zum Speichern der Vertices kannst du ja einfach einen Vector/Liste/Whatever verwenden.

    Das Model für jede Einheit zu laden wäre doch vollkommen sinnlos und obendrein speicherfressend.
    Die Gegner selbst haben nur eine Rotation und Position - zusätzlich zu den anderen Daten die das Spielinterne Verhalten betreffen



  • Ok, wenn ich das richtig verstanden habe, kann ich eine Klasse Enemy oder so schreiben, die dann eine Funktion loadData enthält,die die Datei ausliest und die ich nur einmal bei der Initialisierung aufrufe?



  • Na ja, du solltest das ganze trennen.
    Ne Klasse Enemy ist schonmal richtig.
    Dann hast du noch ne Klasse Model, oder so. Die beinhaltet einfach nur das 3D-Model und die entsprechenden Funktionen zum Verwalten, und die kann auch ein Model laden. Wenn du meinetwegen 5 3D-Modelle hast, erstellst du halt 5 Instanzen dieser Klasse und lädst in jeder das jeweilige Model.
    Jetzt brauchst du dem Gegner nur noch die ID des Models zuweisen.
    Das Ganze lässt sich zwar noch erweitern und verbessern, aber vom Grundprinzip ist es schonmal das, was wir meinen 😉



  • Ok, aber was ist, wenn das Modell irgendwas besonderes können muss, z.B. wenn sich einzelne Teile auf so zu sagen Kommando bewegen sollen?



  • Isodrink schrieb:

    Ok, aber was ist, wenn das Modell irgendwas besonderes können muss, z.B. wenn sich einzelne Teile auf so zu sagen Kommando bewegen sollen?

    Dann erstellst du eben dafür eine Klasse die alles von der Modelklasse erbt nur eben auf die besonderen Eigenschaften eingeht.

    Allerdings klingt das ganze eher so als solltest du dich eher mal mit der grundlegenden Logik und dem Aufbau auseinandersetzen



  • Kuldren schrieb:

    Dann erstellst du eben dafür eine Klasse die alles von der Modelklasse erbt nur eben auf die besonderen Eigenschaften eingeht.

    Ist ja gut, ich gebe mich geschlagen 🙂
    Ich fange dann mal an, was in der Richtung zu basteln und poste dann das Ergebnis hier.

    Kuldren schrieb:

    Allerdings klingt das ganze eher so als solltest du dich eher mal mit der grundlegenden Logik und dem Aufbau auseinandersetzen

    Von was? Programmieren allgemein, Klassen, OpenGL, 3D Grafik, c++...... 🙄



  • Isodrink schrieb:

    Kuldren schrieb:

    Allerdings klingt das ganze eher so als solltest du dich eher mal mit der grundlegenden Logik und dem Aufbau auseinandersetzen

    Von was? Programmieren allgemein, Klassen, OpenGL, 3D Grafik, c++...... 🙄

    Wenn du mit einem Spiel (also z.b. ein Towerdefensegame) anfängst solltest du dich mit der Sprache (hier wohl c++), OOP und OGL bzw D3D (letzere zumindest zum Teil) auskennen!

    Was ich aber gemeint habe war der prinzipielle Aufbau deines Spiels.
    Einfach losprogrammieren endet meist in einem Wirrwarr an Code. Wenn du jetzt viel Arbeit in eine bestimmte Klasse steckst und dann im Nachhinein draufkommst, dass die Klasse total überflüssig ist weil die Daten in einer Anderen besser gekapselt wären, wirst du dich nur unnötig ärgern.
    Du musst ja keine Spezifikation schreiben aber die Grundstruktur sollte klar ersichtlich sein.

    Willst du denn nun ein TowerDefenseGame programmieren? oder etwas anders? je nach dem solltest du bei einem anderen Punkt anfangen. Direkt mit dem Darstellen der Gegner anzufangen finde ich eher schlecht.



  • Von was? Programmieren allgemein, Klassen, OpenGL, 3D Grafik, c++...... 🙄

    OpenGL, 3D-Grafik und C++.



  • Nun ja, vielleicht ist es gar nicht schlecht mal ein kleines Spiel zu schreiben, um richtig in die Materie rein zu finden,
    ich finde Tower-defence nicht schlecht, aber ist das für den Anfang nicht ein wenig schwierig?
    Du kannst mir das sicher beantworten, ich hab grad gesehen das du ja eine sehr schöne Variante programmiert hast 🙂


Anmelden zum Antworten