OpenGL: Wavefront Objekt-Dateien (.obj) laden

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

  • Bislang konnten XProfan's OpenGL-Funktionen leider nur unzureichend benutzt werden, weil bis heute kein aktuelles 3D-Format importiert werden kann. Das viel zu unzureichende Sprache-eigene Format "XPGL" konnte da auch nicht weiter helfen. So findet sich z.B. zum heutigen Zeitpunkt keine einizige Datei davon im Internet. :cool:


    Weil das .obj-Format für 3D-Model von fast allen Modelern unterstützt wird, wäre es für den Import von 3D nach XProfan ideal. Tatsächlich existierte bereits eine Include von Andreas Gaida, die sich des Themas angenommen hatte. Leider arbeitet sie viel zu langsam und benutzt zum Analysieren des Objektcodes keinen Parser, sondern nur eine InStr-Suche, weshalb kaum eine obj-Datei damit geladen werden kann ohne Absturz.


    Darum habe ich mich mal hingesetzt und eine Assembler-Funktion geschrieben, um solche .obj-Dateien in XProfan-Programmen schnell und so sicher wie möglich benutzen zu können. Der erste Betatest ist jetzt hier zu finden.


    Import3D.zip


    Da sich noch Funktionsparameter ändern können und ich noch nicht möchte, dass die Dll im Betastadium schon in eigene Projekte eingebaut wird, erscheint nach dem Laden eines Models noch eine Messagebox. Zudem ist auch noch keine Anleitung fertig, die wohl erst ganz zum Schluss angefertigt wird.


    Damit auch Nicht-XProfaner testen können liegen nicht nur drei Quellcodes, sondern auch drei Exedateien anbei.


    [Blockierte Grafik: http://s3.postimage.org/19fytyrgk/Screen_02_01_2011_00_37_25.jpg]


    Viel Spaß beim Testen. :-)
    Meldet bitte alle Unzulänglichkeiten und wenn ihr wollt, könnt ihr auch die Laufgeschwindigkeit fps hier posten, die in den Demos angezeigt wird. Vielen Dank!

  • @Frabbing


    sieht Super aus. In allen 3 Beispielen ca. 52-63 FPS.


    System: Intel P6000, 4GB Ram ATI HD5470


    Gruß
    Sascha:-)

    Wer ein Problem erkennt, und nichts zu seiner Beseitigung unternimmt, der ist möglicherweise ein Teil dieses Problems.:D

  • Dieter & Thomas: Danke, hab den Link angepasst. Man sollte sich halt nicht immer auf Copy&Paste verlassen. ;-)


    sascha Oliver: Die tatsächliche Framerate könnte durchaus höher liegen, aber ich hab einen Timer von 10 eingebaut, um eine konstante Geschwindigkeit zu erreichen, die auf allen PC's gleich schnell läuft.


    Zitat

    Hast Du diese Include als Vorlage genutzt?


    Nein iF, hab meinen Code von Grund auf selber aufgebaut. Wie oben schon gesagt, ich habe anfangs die Include getestet, aber die Abarbeitung des Objektcodes erfolgt nur per String-Suche und ist deswegen zu fehleranfällig. Und auf die OpenGL-Funktionen von XProfan kann ich mittels Assembler eh nicht darauf zugreifen, das ist alles API, hätte mir also nichts genützt. Betrifft insbesondere die Texturen, die in meiner Version nicht freigegeben werden müssen.
    Als Dateiformat für Texturen sind Bmp, Jpg, Gif und Png unterstützt.


    Hab übrigens deinen Link eingekürzt, weil es nicht nötig ist, immer den Slogan deines Forums mit einzubinden.

  • Das Freeware CAD-Programm Google Sketchup7 hat im Gegensatz zur profesional-Version die unangenehme Eigenschaft, nur ein eigenes Format zu unterstützen. Die Objektcreation in perspektivischem 3D ist aber genial, sodaß ein netter Mensch ein DXF-Exportfilter geschrieben hat. DXF ist auch sehr populär als 3D-Format und hätte den zusätzlichen Vorteil, sehr einfach in (Mechanische/Thermische) Lastrechenprogramme (Finite Elemente Methode FEM) übernommen werden zu können, etwa in Z88-FEA (ebenfalls gratis). Ich hätte daher auch .DXF gern als Import/Export-Fileformat für Xprofan-OpenGL vorgeschlagen (Frommer Neujahrswunsch). Inzwischen werde ich versuchen, im Net einen Konverter .obj <=> .dxf zu finden, mal sehen.
    Prosit 2011!

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

  • Prosit, Klaus und Peter! :-)


    Sicher könnte man noch andere Formate importieren (meine zweite Wahl war .3ds). Aber Wavefront OBJ kann quasi jeder Modeler (ggf. per Plugin wie z.B. Truespace) exportieren und es ist ein Rein-Text-Format. Man kann fast dem Quellcode schon entnehmen, was da dargestellt wird. :lol:


    Darum macht es kaum Sinn, weitere Formate zu unterstützen. Wer ein Grafikobjekt mit XProfan benutzen will, es aber in anderem Format vorliegen hat, benutzt einen Konverter oder einen Free-Modeller und speichert es als OBJ ab und kann es dann immer benutzen. Das ist kein Aufwand und dauert nur 'ne Minute.
    Ein kompletter Import ist dagegen sehr viel aufwendiger und bislang unterstützt meine Dll auch nur die gängigen 0815 Anweisungen, die das OBJ-Format bietet. Da ist noch einiges mehr drin, sodass ich noch genug zu tun habe - auch, wenn schon alles fertig aussieht. ;)


    P.S.: Sketchup habe ich vor einiger Zeit auch mal ausprobiert. Aber es ist äh... sehr rudimentär. Wer das gut findet, sollte tatsächlich mal Truespace oder Blender ausprobieren, die sind ja auch kostenlos. Er wird begeistert sein. :-)


    Bild mit Sketchup:


    [Blockierte Grafik: http://ado95.files.wordpress.com/2010/04/sketchup2.jpg]


    Bild mit Truespace:


    [Blockierte Grafik: http://screenshots.winfuture.de/1202466892.jpg]

  • Hallo Frank,


    habe gerade Deine beiden Downloads getestet... also die erste Variante und nun die zweite Variante mit den spiegelnden Downloads.


    Die erste Variante hat mir schon gut gefallen und die zweite topt dies natürlich. Sieht super aus mit den Spiegelungen... man muss nur aufpassen das es einen nicht regelrecht "blendet" ;).




    Läuft bei mir laufen alle Bilder mit 60FPS.




    Meine Ausstattung:
    Notebook DELL Precision M65
    XP SP3 + aktueller Stand (32-Bit)
    T7400 - Core2Duo 2,16GHz
    4GB - RAM (nutzbar: 3,25 GB)
    Quadro FX 350M
    Auflösung: 1920x1200





    Die Bilder laufen Rund ohne zu Ruckeln und Sauber.
    Mir ist nur folgendes aufgefallen:


    Bei den Darstellungen mit dem Ball und der ägyptischen Figur kommen beim beenden Deiner beiliegenden Programme jeweils exakt dieselben Fehlermeldungen. Und zwar in beiden von Dir zur verfügung gestellten Varianten (ok... die erste Variante ist ja nun nicht mehr downloadbar, da Du denselben Namen benutzt hast).



    Hier die Fehlermeldungen:



    [Blockierte Grafik: http://s3.postimage.org/1hab6xqis/Import_Obj_2_3_Fehler_beim_Beenden.jpg]




    [Blockierte Grafik: http://s3.postimage.org/1hag5js04/Import_Obj_2_3_Fehler_Microsoft_Fehlerberichtsendung.jpg]




    Gruß
    Andy

  • Vielleicht noch ein Hinweis hinsichtlich der aufgetretenen Fehler in beiden von Dir bisher zur Verfügung gestellten Varianten:


    Die Dateinamen wurden von Dir vertauscht:



    Erster Download:
    Satelit:
    ImportObj_1.exe


    Fliegender Ball:
    ImportObj_2.exe


    Ägyptische Figur:
    ImportObj_3.exe




    Zweiter Download (aktueller Download):
    Satelit:
    ImportObj_2.exe


    Fliegender Ball:
    ImportObj.exe




    Gruß
    Andy

  • Danke Andy!


    Wenn du in den Quellcodes, die nach dem Beenden die Fehlermeldung hervorrufen den Dialogstyle setzt und das Hauptfenster vor Beenden mit DestroyWindow(%hwnd) löscht, treten die Meldungen dann immer noch auf?


    Du hast recht, die Demo-Dateinamen haben sich leicht geändert. Liegt wohl daran, dass ich ständig mit verschiedenen Testcodes herum probiere. :-)

  • Kurzer Zwischenstand: Inzwischen kann man auch durchsichtige Objekte darstellen, wobei es später möglich ist, das Aussehen durch bestimmte Flags zu varieren. Transparenz mit OpenGl ist insofern kniffelig, weil Flächen, die vom Betrachter weiter entfernt sind, zuerst gezeichnet werden müssen. Da sich durch Drehung der Objekte diese Z-Reihenfolge ändert und man später in einer Drawliste keine Änderungen vornehmen kann (ist mit XProfan-OGL genauso), können schnell Anzeigefehler passieren. Ich habe mich aber bemüht, das weitgehend zu kompensieren und biete Flags für bestimmte Situationen an.
    Generell gilt aber immer: Transparente Objekte oder Objekte mit transparenten Flächen sollten immer zuletzt gezeichnet werden.


    Ein Update habe ich nicht nicht vorgenommen, das kommt die Tage.

  • Hab gerade ein Update vorgenommen, wobei die Demos komplett überarbeitet und erweitert wurden. :-)
    Sehen jetzt richtig ansehnlich aus.


    [Blockierte Grafik: http://s4.postimage.org/1d053l7ms/Screen_09_01_2011_19_54_44.jpg] [Blockierte Grafik: http://s4.postimage.org/1d0ibvzl0/Screen_09_01_2011_19_57_20.jpg] [Blockierte Grafik: http://s4.postimage.org/1d0x7q410/Screen_09_01_2011_19_59_00.jpg] [Blockierte Grafik: http://s4.postimage.org/1d174y6zo/Screen_09_01_2011_20_00_06.jpg]


    Zitat

    Bei den Darstellungen mit dem Ball und der ägyptischen Figur kommen beim beenden Deiner beiliegenden Programme jeweils exakt dieselben Fehlermeldungen.

    Ein Speicher war leider ein Byte zu kurz berechnet, was den Fehler erklären würde. Bei manchen Objekten hatte ich da auch Probleme. Ist jetzt behoben, ich hab jetzt keine Probleme mehr damit. Kommt der Fehler bei dir jetzt noch, Andy?

  • ja, wie gesagt: die anderen Demos sehen genau so aus wie sie sollen. Nur dieses macht die Probleme mit den fehlenden Texturen. Meine Grafikarte ist in einem Notebook. Soll eine HD5470 mit 512MB sein. Ich brauch ja jetzt nichts grafisches in dieser Art. Wollte dir nur beim Testen behilflich sein :-) Aber vielleicht muss ich auch noch was in den Grafikeinstellung/Treiber ändern. Habe das Notebook erst seit zwei Wochen und habe mich noch nicht allzu toll damit beschäftigt.

  • OpenGL und ATI (AMD) war schon immer etwas problematisch. Bei mobilen
    Chips steigert sich diese Problematik dann noch.
    Nicht umsonst steht bei den meisten Spielen bei, das OnBoard-Grafik-Chips
    nicht supported werden, das ist nicht nur ein Geschwindigkeitsproblem.


    Vielleicht hat Frank aber auch noch einen Fehler drin, der sich nicht bei
    allen bemerkbar macht.


    Gruß
    Thomas

  • Zitat

    Meine Grafikarte ist in einem Notebook. Soll eine HD5470 mit 512MB sein. Ich brauch ja jetzt nichts grafisches in dieser Art. Wollte dir nur beim Testen behilflich sein :-) Aber vielleicht muss ich auch noch was in den Grafikeinstellung/Treiber ändern.


    Danke für deinen Test! Gerade bei solchen Sachen ist man ja immer auf Feedback angewiesen.:-)


    Die Texturen des Pharaos unterscheiden sich insofern von denen der anderen Objekte, dass eine Bitmap verschiedenen Grafik-Teilstücke beinhaltet. Die Darstellung ansich erfolgt dort durch Texturkoordinaten, die in der Objektdatei definiert sind. Das Laden der Texturen unterscheidet sich aber nicht von dem der anderen Objekte. Eine Erklärung habe ich deswegen nicht parat.


    Eventuell liegt es am transparenten Objekt, das zusätzlich angezeigt wird. Vielleicht könntest du im Code "Pharaos.prf" mal diese beiden Zeilen entfernen:

    name$ = "impobjs/tbox6.obj"
    figur2& = ImportObject(Addr(name$), $0)


    Wenn dann Texturen zu sehen sind, liegt es an der transparenten Einstellung. Wie gesagt, ich bin für Feedback immer dankbar und versuche meine Sachen möglichst überall zum Laufen zu bekommen.


    Ich hab's auf drei PC's ohne Probleme getestet: HP Laptop, MSI Netbook und älterer stationärer PC.