Seite 12 von 19

Re: Assimp - Brainstorming zum Release

Verfasst: 06.01.2011, 16:01
von Aramis
Ich hab grade das Gefuehl, dass wir ein bisschen aneinender vorbei reden. Zugegebenermassen, nachdem du in letzter Zeit etwas verhindert warst (nachvollziehbarerweise :-)), hat ein Grossteil der diesbezueglichen Kommunikation zwischen Thomas und mir stattgefunden, weshalb wir beide nun eine relative aehnliche Vorstellung zu haben scheinen.

Grundsaetzlich geht es drum Exportsupport fuer die wichtigsten Formate anzubieten: aiScene rein, fertige Datei raus. Nun ist ja nicht gesagt, dass der Aufrufer die Daten tatsaechlich auf der Platte haben will – er koennte sie ja, wie du gesagt hast, ueber's Netzwerk streamen wollen oder noch eine Pruefsumme berechnen, oder oder oder. Daher die Blobs – de-fakto einfach die exportierten Daten im Zielformat (in den allermeisten Faellen somit augenscheinlich strukturlose Binaersuppe).
Wie erkennt man den Master-Blob
Die Export-Funktion gibt ihn zurueck - er enthaelt dann ggf. einen Link auf den naechsten Blob.

Re: Assimp - Brainstorming zum Release

Verfasst: 06.01.2011, 16:05
von Schrompf
Kimmi, ich habe den Eindruck, Du stellst Dir unter Exporter etwas ganz Anderes vor als wir. Der ganze Sinn eines Exporters ist es, eine Datei zu erstellen, die von einem anderen Programm (nicht bzw. wahrscheinlich nicht Assimp) gelesen werden kann. Daher DARF es keinen Header geben. Wenn das jeweilige Zielformat einen Header definiert, wird der dazugehörige Exporter einen schreiben. Wenn das Exportformat Big Endian verlangt, wird der Export Big Endian schreiben - egal ob auf PPC-Mac oder x86-Windows. Und das Schreiben des Blobs in eine Datei ist der ganze Sinn des Unterfangens. Wie soll denn sonst z.B. 3DStudioMax an die exportierte Szene rankommen?

Der Master-Blob ist der, den die Export-Funktion zurückgibt. Evtl. weitere Blobs werden von dem aus als einfach verbundene Liste referenziert.

Aber ich sehe gerade, dass Alex schneller war als ich. Und auch er ist ein wenig verwirrt darüber, was genau Du eigentlich unter "Export" verstehst :-) Ich hoffe, zusammen konnten wir die Unklarheiten beseitigen.

Re: Assimp - Brainstorming zum Release

Verfasst: 06.01.2011, 16:26
von kimmi
OK, aneinander vorbei geredet. So habe ich das verstanden:
  • Export schreibt zum Beispiel ein aiScene im Obj-Format hinaus.
  • Daten wurden zuvor zum Beispiel aus einem Collada-File gelesen.
  • Blobs sind die Datenhaufen zum Arbeiten, die die Daten von aiScene beinhalten, ein Blob pro File ( also gelesen von einem Obj mit 2 Mtl-Files -> 3 Blobs ).
  • Blobs sollen nicht zum Zwischenspeichen auf die Platte gebracht werden.
  • Blobs sollen dementsprechend keinen Header / Flag whatever haben oder ... <- darauf bezog sich meine Frage.
Meine Frage:
Wenn man einen Blob auf der Platte rumflaggen hat bzw. dort zwischenspeichern und den irgendwohin verteilt: wollen wir das zulassen? Welche Probleme würden auftreten, wenn wir das wollten. Sollen die ein reines In-Memory-Konstrukt sein, die unter gar keinen Umständen jemals auf der Platte landen?
Hintergrund dieser Frage: ich habe mal in einer Firma gearbeitet, wo wir genau so etwas gemacht haben, um die Datenverarbeitung zu beschleunigen, da man nun nicht alles im Speicher haben muss, was bei sehr großen Daten ( mehrere Gig's ) zu Problemen geführt hat.
Daher kam bei mir die Frage auf, die für Verwirrung gesorgt hat, sorry. Hätte das klarer sagen sollen.

Gruß Kimmi

Re: Assimp - Brainstorming zum Release

Verfasst: 06.01.2011, 16:46
von Schrompf
kimmi hat geschrieben: [*]Blobs sollen nicht zum Zwischenspeichen auf die Platte gebracht werden.
Und da gehen die Meinungen auseinander. Natürlich soll der Blob auf Platte gespeichert werden! Das ist doch der ganze Sinn des "Exports". Wie soll denn sonst ein anderes Programm an die exportierten Daten kommen, wenn die nicht in einem File gespeichert sind?

Ablauf: man hat eine aiScene mit Nodes, Meshes, evtl. Anims, Materialien, Lichter, wasweißich. Woher die kommt, ist vollständig egal. Evtl. wurde die vorher aus einer Datei mit Assimp geladen, evtl. wurde sie im Programm aus anderen Daten erstellt. Diese Szene gibt man an aiExportScene(), wobei der zweite Parameter bestimmt, in welchem Format die Szene exportiert werden soll. Anhand des vorgegebenen Formats wird ein Exporter ausgewählt, der die Szene überreicht bekommt. Dieser Exporter schreibt jetzt die Daten in seinem Format raus. Heraus kommt ein Speicherblock, der die Szene im gewünschten Dateiformat enthält. Diesen Speicherblock muss man nur noch auf Platte schreiben und hat so eine Datei im gewünschten Dateiformat, die die gegebenen Szenendaten enthält. Und diese Datei kann dann wieder von irgendjemandem wieder geladen werden, der das Dateiformat versteht. Collada und OBJ verstehen einige, also lohnt sich der Export.

Re: Assimp - Brainstorming zum Release

Verfasst: 06.01.2011, 17:30
von kimmi
Nein, die Meinungen gehen gerade nicht auseinander. Ich fände das auch super, wenn man die Blobs auf der Platte parkt. Daher habe ich das oben ja auch gefragt:
Wenn man einen Blob auf der Platte rumflaggen hat bzw. dort zwischenspeichern und den irgendwohin verteilt: wollen wir das zulassen? Welche Probleme würden auftreten, wenn wir das wollten. Sollen die ein reines In-Memory-Konstrukt sein, die unter gar keinen Umständen jemals auf der Platte landen?
Und da ich mit so etwas schon oft arbeiten musste und durch Probleme wie Streaming Probleme hatte, ich einem Blob zusätzlich zu dem reinen Daten-Buffer noch einen Info-Header spendieren:

Code: Alles auswählen

struct aiExportDataBlob 
{
        /// Data desc. ( flags like id of next blob etc. )
        unsigned int Header:

        /// Size of the data in bytes
        size_t size;
	
        /// The data. 
        void* data;
};
Das ist alles. Selbstredend muss man das nicht machen. Aber man kann und da wollte ich mal eine Meinung zu hören. Ich persönlich würde in einer Anwendung ganz konkret davon profitieren, wenn wir Daten in dieser Form vorliegen hätten ( mit oder ohne Header ist mir schnuppe ), da bei mir der Bottleneck das Vor-Verarbeiten der Modell-Daten darstellt und ich mir das dann sparen könnte. Momentan probiere ich da mit kd-Bäumen rum, um das Ganze etwas zu entschärfen.

Ich hoffe, langsam nähern sich unsere Sichtweisen einander an :).

Gruß Kimmi

Re: Assimp - Brainstorming zum Release

Verfasst: 06.01.2011, 17:47
von Aramis
Ich verstehe das Problem nicht. dass wir einen extra Flags-Member einfuehren, haben wir ja schon beschlossen. Der naechste Blob wird ueber einen Pointer referenziert denn wir hatten uns ja auch auf eine einfach verlinkte Liste geeinigt.

Wenn wir noch weitere Informationen im Blob speichern wollen, koennen wir die ja nach Bedarf hinzufuegen, insofern bleibt alles offen.

Re: Assimp - Brainstorming zum Release

Verfasst: 06.01.2011, 17:56
von Schrompf
Ich verstehe es immernoch nicht. Was sollte denn in dem Header drinstehen? Und was hat das mit der Datenübertragung zu tun, wenn wir hier doch von einer rein im Speicher gehaltenen Struktur reden? Soll der Header mit auf Platte geschrieben werden? Wenn ja, wie soll dann noch ein valides File des gegebenen Dateiformats rauskommen, das auch andere Programme lesen können? Wenn nein, warum soll es dann den Header geben?

Re: Assimp - Brainstorming zum Release

Verfasst: 06.01.2011, 18:17
von kimmi
Arg! Ich hatte einige Postings nicht mitbekommen. Sorry! Ich stimme euch zu und bin nun still!

Gruß Kimmi

P.S.: Ich habe im wesentlichen eure Diskussion wiederholt...

Re: Assimp - Brainstorming zum Release

Verfasst: 06.01.2011, 18:39
von Aramis
Passt schon - ich hoffe, wir sind uns damit insgesamt einig auch wenn das jetzt insgesamt relativ flott kam ;-)

Re: Assimp - Brainstorming zum Release

Verfasst: 06.01.2011, 18:42
von kimmi
Wer lesen kann, ist halt klar im Vorteil. Ich habe das alles noch mal gelesen und da fand ich einige ungelesene Statements von euch ^^. Das, was ich als Header bezeichnet habe, sind deine Flags. Ich bin genau wie Schrompf für auf Platte schreiben. Und da auch das mit Endian bereits vorgesehen ist, hab ich "etwas" an euch vorbei geredet. Wie gesagt, mir fehlten einige Posts. Ich gelobe Besserung.

Gruß Kimmi

Re: Assimp - Brainstorming zum Release

Verfasst: 06.01.2011, 21:43
von Schrompf
Ok, dann passt ja alles :-)

Re: Assimp - Brainstorming zum Release

Verfasst: 10.01.2011, 00:55
von Aramis
Es faellt mir erst jetzt auf: wieso nutzen wir nicht das Stream/IOSystem-Interface zum Exportieren? Darauf aufbauend koennen wir immer noch eine Blob-IOSystem-Implementierung, die alles in unsere jetzigen Blobs hineinschreibt, anbieten.

Die meisten Exporter werden einfach von vorne nach hinten ihre Daten schreiben, wissen aber nicht von Anfang an, wie viel Platz sie benoetigen werden. Das riecht nach Stream - wenn 99.9% der User die Daten sowieso auf der Platte haben wollen, reicht die Default-Implementierung des IOSystem's im Normalfall aus und kommt von Haus aus mit mehreren Dateien klar (und sogar auch mit beliebig komplexen Ordnerstrukturen).

Kurz: machen wir es einfach umgekehrt - Exporter schreiben in ein IOSystem rein und darauf aufbauend eine Hilfsfunktion, die ein eigenes IOSystem setzt und den ganzen Kram in Blobs abfaengt.

Wir sparen uns damit Arbeit - kein Exporter muss sich mit Blobgroessen rumschlagen. Fuer den Grossteil der User wird das ganze flotter und die Ausgabedaten muessen nicht vollstaendig in den Speicher passen (Assimp ist ja sowieso nicht so sonderlich streaming-faehig, da die aiScene staendig im Speicher sein muss - trotzdem koennte man sich Faelle vorstellen, bei denen die aiScene + der schaetzungsweise nochmal genauso grosse Export-Blob den x86-Adressraum sprengten bzw. kein entsprechend grosser Block mehr verfuegbar ist).

Das ist mir eben erst aufgefallen - ich glaube, die Blobs als Primaerinterface sind auf Dauer der falsche Weg.

Re: Assimp - Brainstorming zum Release

Verfasst: 10.01.2011, 08:24
von Schrompf
Da könntest Du recht haben. Aber können wir denn Standard-Streams auf unser IO-System mappen? Ansonsten wäre das wirklich die Ideallösung für alle Dateisysteme: der Nutzer übergibt einen Start-Dateinamen und evtl. ein IOSystem (Defaultparameter NULL) und das Thema wird erledigt. Find ich gut.

Ich hab im ColladaExporter aktuell einen StringStream benutzt.

Re: Assimp - Brainstorming zum Release

Verfasst: 10.01.2011, 11:56
von kimmi
Das wäre klasse. So könnten wir Blobs zum Beispiel gleich gezippt speichern, wenn wir das wollen :).

Gruß Kimmi

Re: Assimp - Brainstorming zum Release

Verfasst: 11.01.2011, 23:15
von Aramis
Ok, Draft ist aktualisiert.

Re: Assimp - Brainstorming zum Release

Verfasst: 03.02.2011, 15:14
von Aramis
Kurze Info: ich habe die geltenden Limits fuer die UV-Channel- bzw. Vertexcolor-Kanal-Anzahl von 4 auf 8 erhoeht. An dieser Stelle ein Glueckwunsch an uns: scheinbar hat niemand je versucht, die Konstanten als gottgegeben anzusehen und sich auf ihren Wert zu verlassen - und wenn doch, wurde es jeweils sauber assert()ed ;-)

Woher ich diese Gewissheit nehme: Die Testsuite hat keine Probleme identifiziert und laedt immerhin ~260 Modelle mit jeweils 3 verschiedenen Postprocessing-Setups. Einzig die ganzen Objs und einige Blender-Files weichen aktuell vom Referenz-Dump ab, aber das liegt wohl an Kimmis letzten Fixes am Obj-Loader bzw. meiner Unfaehigkeit letzterem Loader ein paar noch verbliebene Nicklichkeiten auszutreiben. Trotzdem muessen wir uns auf jede Menge versteckter Regressionen gefasst machen. Ich denke aber, dass die Erhoehung des Limits ein lange ueberfaelliger Schritt war.

8 Channels should be enough for everyone.

Gruss, Alex

Re: Assimp - Brainstorming zum Release

Verfasst: 03.02.2011, 20:01
von Eisflamme
Ihr ladet mittlerweile Blender, das ist neu, oder? Ich hab gehört, das Format sei wirklich Mal eine Heidenarbeit, da das Format sehr... ich sag Mal heterogen speichert. Wenn das alles so stimmt, dickes Kompliment, da werde ich sicherlich auch noch das ein oder andere Mal testen. :)

Re: Assimp - Brainstorming zum Release

Verfasst: 03.02.2011, 20:11
von Aramis
Ja, Assimp unterstuetzt Blender, wenngleich bislang noch ohne Animationen. Werde ich mich naechstens mal ranwagen.

Feedback zum Blender-Loader ist sehr erwuenscht. Wie du richtig feststellst, hat das Format so seine Tuecken. Als heterogen wuerde ich es nicht bezeichnen, eher als sehr, sehr Blender-zentrisch, soll heissen ex-zentrisch ;-)

Gruss, Alex

Re: Assimp - Brainstorming zum Release

Verfasst: 10.02.2011, 17:35
von Aramis

Re: Assimp - Brainstorming zum Release

Verfasst: 11.02.2011, 11:10
von kimmi
Ich habe die Änderungen im Obj-Loader auf dem Zettel, bin bisher aber noch nicht dazu gekommen. Ich kann mir im Zuge dessen den Rest auch anschauen.

Gruß Kimmi

Re: Assimp - Brainstorming zum Release

Verfasst: 14.03.2011, 01:28
von Krishty
Ich hoffe, dieser Thread ist immernoch für Brainstorming da … mir fiel beim jammern ein:

Man kann Assertions nicht nur zum Debugging nutzen, sondern auch für Optimierungen – dafür #definiert man Assertions in Debug-Builds nicht leer, sondern (unter Visual C++) mit __assume(expr). Während man im Debug-Build also sagt: Diese Bedingung muss eintreten, und falls nicht, brich die Ausführung ab, damit ich korrigieren kann, bedeutet es in Release-Builds: Diese Bedingung muss eintreten, optimier daraufhin.

Bei mir bringt das ordentlich was, weil ich z.B. bei Funktionen, die allokierte Objekte zurückgeben müssen, assert(nullptr != result); vor den return-Ausdruck schreibe. Der Compiler weiß dann im weiteren Verlauf, dass das Ergebnis der Funktion und alle Zeiger, in denen es gespeichert wurde, nicht nullptr sein kann und optimiert jeden Text, der etwas anderes annehmen könnte oder Rückgabewerte testet, weg. Das schmeißt nochmal vieles raus, was LTCG nicht von allein rafft (wenn auch imo nicht genug). Wenn man assert() hingegen leer #definiert, bleiben diese Optimierungen aus.

Viel bringt das auch, wenn man per assert() Wertebereiche von Variablen festlegt.

Visual C++ kann nur einfache Ausdrücke, wie Vergleiche, verwerten. Sowas wie assert(0xFCBDA == computeCRC32of(mesh.header()->id())) würde ignoriert und nicht zur Optimierung herangezogen; würde es bei leerem Release-assert() aber ebenso.

Ihr könnt also mal darüber nachdenken, ob ihr ai_assert() in Release-Builds unter Visual C++ nicht zu #define ai_assert(expression) __assume(expression) ändert. Ich habe leider momentan kein Assimp-abhängiges Projekt, sonst hätte ich selber schon getestet, wie viel das bringen würde (wenn überhaupt – es hängt eben auch davon ab, wie oft und wie komplex man ai_assert() einsetzt). Aber ich glaube zumindest nicht, dass es schaden könnte.

Nachtrag: Gerade ausprobiert; 8 KiB bzw. 0,5 % weniger Maschinentext. Nicht viel, aber wenn man die beiden Speicherseiten schonmal fast gratis bekommt, kann man sie auch direkt mitnehmen.

Re: Assimp - Brainstorming zum Release

Verfasst: 17.03.2011, 17:35
von Krishty
Mal ein Nachtrag zu __assume(), da habe ich noch ein paar Probleme gefunden:
  • In DefaultLogger.cpp müssen alle ai_assert(false) durch ai_assert(message.length() <= MAX_LOG_MESSAGE_LENGTH) ersetzt werden — ai_assert(false) bedeutet: „Dieser Befehl darf niemals erreicht werden“. Darum würde der Optimizer den kompletten Block wegoptimieren, wenn er auf __assume(false) träfe. Dasselbe gilt für SceneCombiner.cpp:67 und u.U. Subdivision.cpp:119.
  • In BlenderModifier.cpp:299, StreamReader.h:93 und Subdivision.cpp:564 müssen die ai_asserts so angepasst werden, dass sie boolesche Ausdrücke ergeben (NULL !=?)
Dann sind mit __assume() zwar viele Funktionen einige Bytes kleiner, aber die Gesamtgröße hat um 600 B zugenommen – scheinbar fast ausschließlich durch SceneCombiner::MergeScenes(), wo nun agressiver geinlinet wird.

Davon ab noch was, was man machen könnte:
  • In den Vergleichsoperatoren von aiString memcmp() statt strcmp() benutzen, weil an dieser Stelle sicher ist, dass die Strings gleich lang sind. Das ist bestenfalls doppelt so schnell.
  • Nachtrag: Wo nur Ausgabe-Funktionalität gefordert ist, kann man ::std::ostringstream statt ::std::stringstream benutzen. Ersteres hat eine flachere Vererbungshierarchie und umgeht Diamantvererbung, weshalb deutlich weniger Aufwand für K’toren und D’toren am Anfang und Ende der Nutzungszeit aufgewendet werden muss. Betroffen sind
    • code\BoostWorkaround\boost\format.hpp:34
    • code\LWOLoader.cpp:1100
    • code\OgreImporter.cpp:224
    • code\OgreImporter.cpp:245 und
    • code\Q3BSPFileImporter.cpp:71.
  • Assimp::Logger::debug()/info()/warn()/error() für const char * const überladen. Die Überladungen unterscheiden sich von den Originalen insofern, als dass sie nicht message.length() sondern strlen(message) für die Längenprüfung benutzen. Bringt: 2,9 % weniger Größe (manche Importierungsfunktionen werden um bis zu 2 KiB kompakter) und einen winzigen Laufzeitvorteil, weil bei den meisten Logger-Meldungen die Konstruktion eines temporären ::std::string entfällt und die Prüfung schon zur Kompilierzeit aufgelöst werden kann.
Bringt zwar nicht viel, aber all das kann man mit minimalem Aufwand an den Laderoutinen durchführen. Ich habe auch noch am Exception-Handling rumgefummelt, aber da kam kaum was Merkliches bei raus.

Re: Assimp - Brainstorming zum Release

Verfasst: 17.03.2011, 20:27
von kimmi
Das würde dann aber nur für neuere Visual-Studio-Varianten funktionieren, richtig? Müßte man mal schauen, wie man das integriert.

Gruß Kimmi

Re: Assimp - Brainstorming zum Release

Verfasst: 17.03.2011, 20:39
von Krishty
__assume funktioniert nur auf Visual C++ (ab .NET 2003 – aber was früheres unterstützt ihr eh nicht mehr); aber angesichts der minimalen Verbesserung ist es auch längst nicht mehr meine Lieblingsoptimierung. Im Zweifel doch lieber die anderen drei.

Re: Assimp - Brainstorming zum Release

Verfasst: 03.04.2011, 17:22
von Aramis
Nachdem ich ein bisschen am Assimp-Kern rumgebastelt habe, ist es wohl mal wieder Zeit fuer ein Status-Update.
  • Das Exportinterface ist mittlerweile vollstaendig implementiert. Auch das Sekundaerinterface ueber Blobs funktioniert und ist durch Test-Cases grob abgedeckt.
  • Das Export-Interface ist nun standardmaessig aktiviert, auch in CMAKE. NO_EXPORT deaktiviert es.
  • Sowohl AssimpCmd als auch AssimpView unterstuetzen nun das Exportieren. Thomas' sehr kreativer, hardgecodeter Collada-Export im Viewer ist dabei rausgeflogen. Wenigstens habe ich jetzt nicht mehr staendig eine test.dae auf dem Desktop :-)
  • Krishty's Tipps von oben sind, mit Ausnahme von __assume implementiert. Die Platzersparnis lag in der Tat im Bereich 2-3%.
  • Website ist auch auf dem neuesten Stand. Ihr muesst ggf. aktualisieren.
Mick-p's Deboneprocess ist ebenfalls bereit, ich warte nur noch auf ein Testmodell.

Naechste Schritte von meiner Seite:
  • Exporter-Doku
  • Die Export-Funktionalitaet verwenden um die Regressions-Suite zu erweitern (z.b. Ping-Pong Import/Export-Tests)
  • IGES
  • Blender-Animationen
  • 3DS-Export
  • Refactoring bei einigen grenzwertig implementierten Loadern

Re: Assimp - Brainstorming zum Release

Verfasst: 03.04.2011, 20:08
von Schrompf
Gute Sache!
Aramis hat geschrieben: [*]Sowohl AssimpCmd als auch AssimpView unterstuetzen nun das Exportieren. Thomas' sehr kreativer, hardgecodeter Collada-Export im Viewer ist dabei rausgeflogen. Wenigstens habe ich jetzt nicht mehr staendig eine test.dae auf dem Desktop :-)
Oh, sorry. Hatte gar nicht bemerkt, dass ich das eingecheckt habe.

Re: Assimp - Brainstorming zum Release

Verfasst: 15.04.2011, 17:36
von Aramis
Debone von Mick-p ist drin. Hab bei der Gelegenheit etwas aufgeraeumt.

Der Step findet tatsaechlich bei fast allen animierten Testmodellen mindestens 1 oder 2 voellig unnoetige Bones.

Re: Assimp - Brainstorming zum Release

Verfasst: 19.07.2011, 13:35
von Aramis
Moin,

ich hab eine rudimentaere Testversion eines Obj-Exporters am laufen und hab mich dabei an Thomas' Collada-Code orientiert.

Der nutzt recht an zentraler Stelle einen std::stringstream und kopiert das Resultat in einen IOStream. Die zusaetzliche Kopie duerfte in den meisten Faellen schneller sein als direkt in den IOStream zu schreiben weil der ja bei jedem Write potentiell auf die Platte geht.

Was mir eher Sorgen macht ist die locale-Abhaengigkeit von stringstream. Bin ich falsch informiert oder bekomme ich auf einem System mit deutscher Locale Kommas als Fliesskomma-Separatoren? (mein System ist bedauerlicherweise rein en_us).

Sollte das der Fall sein, brauchen wir eine Alternative - weiss jemand ob ss.imbue(std::locale("en_US.UTF8")); ausreichend portabel ist und das gewuenschten Resultat bringt? Oder kennt jemand ein drop-in Replacement fuer stringstream, das nicht von einer Locale abhaengig ist? Dasselbe gilt natuerlich auch fuer boost::lexical_cast.


Ansonsten schlage ich vor, dass wir als Testkriterium fuer unsere Exporter folgendes festhalten:
  • Wenn ich ein File in einem beliebigen Quellformat nehme, lade und nach A im zu testenden Format exportiere
  • A erneut lade
  • und nach B im selben Format exportiere
  • muessen A und B vorbehaltlich Fliesskommadetails identisch sein.
Dieses Kriterium ist insbesondere nuetzlich wenn es um das Generieren von Namen und Identifiern beim Export geht (was zuweilen erforderlich sein kann, z.b. bei Obj).

Re: Assimp - Brainstorming zum Release

Verfasst: 19.07.2011, 14:06
von Schrompf
Nach meinem Wissen ist stringstream und Konsorten von Haus aus "en_us.UTF8", bis man eine andere Locale imbued. Was für ein phantastischer Satz.

Zum zweiten Teil stimme ich Dir zu: das Export->Import->Export-Kriterium müsste eigentlich immer gegeben sein, außer man erzeugt Identifier mit einem "Text%d" % rand() oder sowas :-)

Re: Assimp - Brainstorming zum Release

Verfasst: 19.07.2011, 14:53
von kimmi
Das Testkriterium halte ich für sinnig, zumindest als Wunschziel. Gerade beim Obj-Format enthalten die Modelle noch einiges an Groppierungsanweisungen, die ebenfalls beim Export nicht uninteressant wären, sofern der jeweilige Exporter diesbezüglich ein dazu passendes Gruppierungselement unterstützt.

Ein Problem sehe ich allerdings, wenn irgendwann einmal Curved Surfaces unterstützt werden sollen. Entweder tesseliert man diese gleich und arbeitet mit den Dreiecken weiter, was aber beim Export->Impoprt->Export zu Problemen in der Genauingkeit führen wird. Oder man hebt sich die Kurvenbeschreibungen auf.
Oder aber man entscheidet sich, komplett Curved-Surfaces außen vor zu lassen.

Gruß Kimmi