So ich habe den Collada 1.4.x C# parser fertig. Zumindest für meinen Verwendungszweck
Getestet wurde das Sample Cube Beispiel aus der 1.4.1 Doku, sowie eine komplexe Scene die aus Google Sketch kommt mit tausenden von dreiecken.
Kann also aktuell folgendes:
- Library geometries auslesen Die Meshes werden eingeschränkt ausgelesen: Aktuell werden nur "Polygons" und "Triangles" als primitive typ unterstüzt. In diesen typen werden "POSITION", "NORMAL", "TANGENT", "BINORMAL" und "TEXCOORD" ausgelesen mit Indices versteht sich (Jeder typ hat sein eigenes Indice array)
- Library visual scenes auslesen Dazu gehört auch die Scene nodes implementierung mit Transformationen
Alle anderen sachen habe ich nicht oder nur teils implementiert.
Wobei ich denke das ich sehr flexibel programmiert habe, so das sachen nachzupflegen kein grosses Problem ist.
Besteht hier interesse an diesem Loader ?
Wenn ja, dann werd ich das Projekt als OpenSource bereitstellen.
Die Frage hierfür die noch zu klären wäre unter welcher Lizenz, da als Anhängigkeit OpenTK besteht wegen der Vector Library und das nutzt AFAIK eine eigene Lizenz.
Ich hätte gerne eine Lizenz bei dem man es Kommerziel sowie Nicht-Kommerziel verwenden darf und das man den Original Author + Copyright + Lizenz nennen bzw. beilegen muss.
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2623 Wohnort: Berlin
Programmiersprache: Go, C/C++
lgpl, Apache, MIT, BSD, gpl, MPL können das alle aber die feinheiten bestimmen die Lizenz. Apache, MIT und BSD sind die lockeren Lizenzen, wärend BSD von den 3 die lockerste ist, dann MIT und dann Apache. Im Prinzip sagen alle 3 das gleiche nur sind alle 3 aus unterschiedlichen Zeiten und entsprechend definieren sie mehr. Wärend BSD sehr alt ist und nur wenig fest legt ist Apache 2.0 recht neu und stopft sehr viele Lücken im Gesetzt. Das macht sich dann in der Größe der Lizenz bemerktbar, BSD/MIT unter einer Seite und Apache 2 über 4 Seiten. Wie gesagt sind alle 3 von Ihren Bedingungen deckungsgleich. Google z.B. zieht Apache 2.0 den anderen Lizenzen vor, da es vor Gericht weniger Probleme macht, gerade in Bezug auf Patente.
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Ich hatte das komplett übersehen. Habe das natürlich schnell eingebaut und funktioniert auch. Das laden der instance_nodes aus den Libraries geht wunderbar.
Aber, nun bin ich auf ein Problem gestossen dass ich vorher nicht bedacht habe.
Es gibt in Collada ja verschiedene Libraries. Libraries enthalten die eigentlichen Daten wie z.b. Geometry (Mesh), Visual scenes und die dazugehörigen Nodes usw. Nodes können aber noch Instancen von anderen Nodes enthalten die wiederrum wieder in der Node library sind. Instanzen sind nur referenzen auf ein Objekt in der Collada Library.
Nun aber da ist das Problem,
ich baue gerade eine Scene graph implementierung welches mein geladenes Collada auf den Bildschirm bringen soll.
Blöderweise habe ich nicht daran gedacht, das Instanzen "EXTREM" benutzt werden bei Collada, und mein aktuelles Test model "Ein japanischer tempel" (erstellt in Google Sketchup) soviel probleme deswegen macht.
Hatte versucht die Instance_Node´s nachzurekonstrurieren, also Rekursive alle nacheiner zu erstellen. Da aber Instanzen auch wieder Instanzen haben können, kann und wird das in einer Endlosschleife enden
Die Frage die sich jetzt stellt für, wie implementiere ich einen Scene Graphen der mit den Instanzen zurechtkommt ? Also der auch wirklich Instanzen unterstützt ? Möglicherweise hab ich das ganze Konzept eines Scene Graph´s nicht verstanden ??
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2623 Wohnort: Berlin
Programmiersprache: Go, C/C++
Eigentlich hat ein SceneGraph ja Nodes, die eine Identifikation zulassen, also Zahl oder Name oder am besten beides. Wenn du ein Neues Node erstellen willst, dann sollte da eine Prüfung laufen ob schon existent und dann diese zurück gibt. Aller TSceneGraphNode.GetInstance("MyIDName") oder halt mit ID.
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Dann biete ich noch die Lösung Blender ^^, file laden und dann in dein gewünschtes Format exportieren.
Das habe ich übrigens auch grade ausprobiert und es funktioniert leider nicht Habe den mitgelieferten Collada Importer probiert (Gab nen fehler beim importieren) und einen anderen der zwar was gemacht hatte, aber mein test modell (Der tempel) nur teilweise importiert wurde.
Somit gibt es wohl aktuell keinen funktionierenden Collada 1.4.1 importer für Blender
Habe gerade auch mal versucht die Original Collada Datei mit Google Sketchup zu laden. Das lief problemlos, es kam nur ein Hinweis das möglicherweise nicht alles importiert wurde. Sah nachdem import aber alles ok aus.
Jetzt stellt sich für mich die Frage, wie ich weiter mache.
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2623 Wohnort: Berlin
Programmiersprache: Go, C/C++
Collada ist nun mal ein Format um Daten von einem Content Tool zum anderen zu transportieren, für die praktische nutztung ist es nicht gedacht und bei weitem nicht geeignet. Wie du schon gemerkt hast ist Collada mal riesig und völlig zugestopft mit verschiedenen Lösungsmöglichkeiten für gleiches Problem. Wenn es dein Ziel ist es zum transport von einem Tool zum anderen zu verwenden, kannst du entweder einen bestehenden importer nutzen(nvidia, blender, assimp,...) oder deinen weiter entwickeln, bis er genug unterstützt. Solltest du ein Modelformat suchen kann ich nur von abraten weiter dran zu arbeiten. Mir ist bis dato kein Collada Importer/Exporter bekannt, der die ganzen specs beherrscht und ich sehe das mehr als wer hat den längsten Spiel, statt ein sinnvolles format.
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Eigentlich hat ein SceneGraph ja Nodes, die eine Identifikation zulassen, also Zahl oder Name oder am besten beides. Wenn du ein Neues Node erstellen willst, dann sollte da eine Prüfung laufen ob schon existent und dann diese zurück gibt. Aller TSceneGraphNode.GetInstance("MyIDName") oder halt mit ID.
Denke ich habe eine Idee wie ich das lösen kann. Die Node Instanzen werden zur Scene Node Root hinzugefügt und markiert.
Dann muss ich nur dafür sorgen, das solche nodes nicht Doppelt vorkommen, so wie du es beschreibst mit ID überprüfung.
Dann hätte ich in einer Scene Instanz nodes die alleine keine Funktion haben, aber als Instanz verwendet werden können.
TAK2004 hat geschrieben:
Collada ist nun mal ein Format um Daten von einem Content Tool zum anderen zu transportieren, für die praktische nutztung ist es nicht gedacht und bei weitem nicht geeignet. Wie du schon gemerkt hast ist Collada mal riesig und völlig zugestopft mit verschiedenen Lösungsmöglichkeiten für gleiches Problem. Wenn es dein Ziel ist es zum transport von einem Tool zum anderen zu verwenden, kannst du entweder einen bestehenden importer nutzen(nvidia, blender, assimp,...) oder deinen weiter entwickeln, bis er genug unterstützt. Solltest du ein Modelformat suchen kann ich nur von abraten weiter dran zu arbeiten. Mir ist bis dato kein Collada Importer/Exporter bekannt, der die ganzen specs beherrscht und ich sehe das mehr als wer hat den längsten Spiel, statt ein sinnvolles format.
Mein Ziel ist es nur meinem Tempel der halt nur im Collada format zu verfügung steht in den Speicher zu packen und den mit VBO´s bzw. erstmal plain mit glBegin() glEnd() zu rendern.
Mitglieder in diesem Forum: 0 Mitglieder und 13 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.