Registriert: Di Aug 21, 2012 19:31 Beiträge: 173
Programmiersprache: C#
Moin.
Mal angenommen ich habe in Blender ein 3D-Modell erstellt und möchte dies in OpenGL darstellen. Ich bin leider etwas verwirrt durch den ganzen Krams (Python, Exporter, Loader...) der dazu zu lesen ist und würde gern ein wenig in die richtige Richtung gelenkt werden.
Ich hätte am liebsten die Triangles aus dem Modell in einem XML-File, dass ich danach lesen kann. (Keine Ahnung ob das der übliche Weg ist)
Wie muss ich vorgehen um die Daten aus dem Modell zu erhalten?
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Es gibt einen großen haufen von Modellformaten. Wenn du die Triangles in nem eigenen Format haben willst, musst du einen eigenen Exporter schreiben. Gängiger ist es aber für den Einstieg, ein einfaches Format wie Wavefront Obj zu nehmen. Einen Exporter dafür liefert Blender gleich mit. Wie man die Daten interpretiert findet sich zu hauf im Internet dokumentiert.
grüße
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Warum ist ASCII leichter zu lesen als … ASCII? Wavefront Obj ist ASCII
grüße
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Ich meine mich zu erinnern, dass auch vor kurzem jemand Delphi Bindings dafür erstellt hat.
Die lib kann viele unterschiedliche Modelformate laden und was du dann in deinem Programm raus bekommst ist eine Datenstruktur die, unabhängig vom Modelformat, immer gleich aussieht. Ich für meinen Teil fands ziemlich nervig eigene Loader für irgendwas zu schreiben, ist zwar anfangs ganz interessant, aber irgendwann fragt man sich ob man den ganzen Schmodder eigentlich braucht für die eigenen kleinen Tests und lässt dann eh die hälfte des Formats weg
_________________ Der Mensch hat neben dem Trieb der Fortpflanzung und dem zu essen und zu trinken zwei Leidenschaften: Krach zu machen und nicht zuzuhören. (Kurt Tucholsky)
Schwabbeldiwapp, hier kommt die Grütze. (Der Quästor)
Registriert: Di Aug 21, 2012 19:31 Beiträge: 173
Programmiersprache: C#
Vielen Dank,
mit dem Wavefront-Format komm ich ganz gut zurecht. Hat alles was ich brauche (momentan zumindest) und ist auch recht übersichtlich... ist ja ASCII Konnte bereits ein Modell laden und inklusive beleuchtung (smooth) darstellen. Morgen kommt noch Textur in den Loader und dann bin ich zufrieden. Mein erstes Modell ist ein Bäumchen, schaut vernünftig aus.
Registriert: Di Aug 21, 2012 19:31 Beiträge: 173
Programmiersprache: C#
So nun denn
Nachdem ich es nun geschafft habe das Modell inklusive Normalen pro Vertex und Texturen zu laden und darzustellen:
Dateianhang:
Tree.jpg
treten doch ein paar Fehler auf:
Dateianhang:
badtree.jpg
Hier ist deutlich zu sehen, dass die Textur (nur an einigen Stellen) "verzogen" ist. In Blender sieht es feini aus.
Ich weiß gerade nicht woran es liegt. Ich vermute jedoch, dass es irgendwie mit dem Export aus Blender zu tun hat. Wäre es ein generelles Problem, sollte die Textur ja vermutlich überall nicht stimmten.
Gibt es da besondere "Einstellungen", die man beim Export beachten muss um eine vernünftige Darstellung in OpenGL zu erhalten oder bin ich komplett auf dem Holzweg!?
Grüße!
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Registriert: Di Aug 21, 2012 19:31 Beiträge: 173
Programmiersprache: C#
Yeah! Problem erkannt, Problem verbannt
Auflösung: Ich habe bemerkt, dass die Textur gar nicht mit dem übereinstimmt, was mir Blender anzeigt. Sprich die Koordinaten stimmten nicht wirklich, auch wenn es an den meisten stellen ein schlüssiges Bild ergab. Also habe ich die eingelesenen UV-Koordinaten anzeigen lassen und konnte diese als Fehlerquelle ausschließen.
Trotzdem war ja die Textur insgesamt irgendwo verschoben. Mit etwas rumprobieren konnte ich dann sehen, dass die Verschmierungen häuptsächlich an den Seams zu sehen sind. Ich fing an mich zu wundern, warum die Seams diese Verschmierungen verursachen.
Dann erkannte ich die tücken der OOP in meinem Problem
Die Faces verwenden gemeinsame Vertices an den Stellen an denen sie auf andere Faces treffen. Und genau das habe ich auch getan, statt einen neues Objekt zu erzeugen habe ich das Objekt eben für mehrere Faces verwendet. So werden die UV-Koordinaten überschrieben und stimmen eben nicht mehr:
Code:
Point A = new Point(((Point)vertices[a]).getX(), ((Point)vertices[a]).getY(), ((Point)vertices[a]).getZ());
Registriert: Di Aug 21, 2012 19:31 Beiträge: 173
Programmiersprache: C#
So dann, da ist er: mein erster Baum Bzw. gleich mal 3 davon:
Dateianhang:
treewithleafes.jpg
Geladen mittels eigenem Loader. Das model wird geladen und kann dann an ein Object Tree angehängt werden, sodass ich für jeden Baum eigene Positionsangaben machen kann. Das erste mal für mich! Man ist dat aufregend
Aber ein paar Fragen habe ich dennoch:
Die Blätter sind mit png-texturen auf Quads erstellt und demnach muss ich OpenGL ja irgendwie sagen, was es mit den durchsichtigen Teilen der Textur zu machen hat. Momentan mach ich das mittels:
Code:
Gl.glEnable(Gl.GL_ALPHA_TEST);
Gl.glAlphaFunc(Gl.GL_GREATER, 0.9f);
was ja auch funktioniert. Aber ist das der übliche Weg / Best Practice?
Grüße!
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Das mit dem Alphatest ist schon richtig, das wird in so ziemlich allen Spielen so gemacht. Die Alternative wäre jedes Blatt einzeln aus Dreiecken zusammenzubauen, was aber aufgrund der hohen Anzahl nicht für Echtzeitanwendungen mit mehr als ein paar Bäumen nicht geeignet ist Normalerweise malt man in die Blatt-Textur dann auch ein paar Zweige, und richtet die Quads dann so aus, das diese Zweige mit einem der Äste verbunden sind. Ist dann allerdings ein etwas erhöhter Aufwand beim erstellen der Bäume und muss für den Anfang nicht sein.
Registriert: Di Aug 21, 2012 19:31 Beiträge: 173
Programmiersprache: C#
Zitat:
Normalerweise malt man in die Blatt-Textur dann auch ein paar Zweige, und richtet die Quads dann so aus, das diese Zweige mit einem der Äste verbunden sind. Ist dann allerdings ein etwas erhöhter Aufwand beim erstellen der Bäume und muss für den Anfang nicht sein.
Also so genau muss ich da glaub ich gar nicht sein. Ich möchte mich eh auf Strategie/Wirtschaftssimulation konzentrieren. Man sieht eh alles nur von oben und aus einer gewissen Entfernung und ich denke bei der Zahl an Bäumen/Gebäuden die unter Umständen auf dem Bildschirm zu sehen sein können, wäre vermutlich schnell die Lleistungsgrenze erreicht, wenn man es mit der Zahl der Polygone übertreibt.
Das Laden der Modelle klappt inzwischen sehr gut:
Dateianhang:
holzfaeller.jpg
Denke das reicht an Funktionalität und ich kann mich so langsam auf Logik konzentrieren. Der Umgang mit den Modellen ist recht cool... ich hab keine Ahnung, was da gängige Praxis ist:
Code:
PaintableObject t1 = new PaintableObject();
t1.setMove(new Vector3d(7, 0, 5));
t1.setParentPosition(new Vector3d(0, 0, 0));
t1.calcRealPosition();
t1.setModel(modelLoader.getModel("tree2010"));
t1.setRotation(80);
objects.addPaintableObject(t1);
Grüße!
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.