Laden...

Modelle in SharpDX laden

Erstellt von garados001 vor 10 Jahren Letzter Beitrag vor 10 Jahren 2.985 Views
G
garados001 Themenstarter:in
33 Beiträge seit 2012
vor 10 Jahren
Modelle in SharpDX laden

Ich wollte ein 3D Objekt mittels SharpDX.Toolkit.Graphics.Model laden. Der Exporter von DelEd unterstütz dabei foldende Formate:*xml *dxs *dae *x *obj

Ich habe dann versucht diese Datei zu laden (jedes Format ausprobiert) und erhalte dabei immer dieselbe Fehlermeldung.


model = Content.Load<Model>("Pyramid.obj");
 //hier mal mit obj, hatte aber schon die anderen Formate ausprobiert

Fehlermeldung:
In SharpDX.Serialization.InvalidChunkException ist eine Ausnahme vom Typ "SharpDX.DLL" aufgetreten, doch wurde diese im Benutzercode nicht verarbeitet.

Zusätzliche Informationen: Unexpected chunk [<COL/0x4C4F433C] instead of [TKMD/0x444D4B54]

Hab mich dann mal etwas kundig gemacht, anscheinend wird das *.tkb Format gebraucht, was mit C:\Program Files (x86)\SharpDX\Bin\DirectX11_1-net40\tkmodel.exe erstellt werden kann. Leider habe ich aber nirgendswo etwas gefunden, wie man das anstellt.

Könntet ihr mir dabei helfen?

5.658 Beiträge seit 2006
vor 10 Jahren

Hi garados001,

ich kann mir nicht vorstellen, daß du mit allen 5 Dateiformaten die gleiche Fehlermeldung bekommst. Bist du dir sicher, daß es sich tatsächlich um das .OBJ-Format handelt? Hast du mal das .X-Format ausprobiert? Das ist ein natives DirectX-Format und benötigt keine Konvertierung. Wenn das alles nicht funktioniert, probier doch mal, die Dateien mit einem anderen 3D-Programm zu laden.

Die Load-Methode erwartet übrigens einen Asset-Namen, nicht einen Dateinamen:

Loads an asset that has been processed by the Content Pipeline. Reference page contains code sample.

Christian

Weeks of programming can save you hours of planning

G
garados001 Themenstarter:in
33 Beiträge seit 2012
vor 10 Jahren

Ich habe mal deinen Tipp ausprobiert. Habe einen Anderen Creator runtergeladen und die Datein impoertiert - keine Fehler. Von denen erstellte Datein kann aber SharpDX auch nicht laden.

Aber ich war selber nicht ganz untätig:
Hab mal den Sourcecode von SharpDX überprüft, die tkmodel.exe war unvollständig und noch nicht fertig. Hab sie mal bearbeitet. (Nur ein Console.Read() am Ende und das Speichern nach dem Konvertieren hat gefehlt und ein paar kleinere Fehler beim Serialisieren debuggt).
Ich habe mal den Ordner davon mal hochgeladen (<Link entfernt>), den müsst ihr so ausführen (Kein Ersetzen der Installation, wegen der Änderungen).
Der Dateipfad der 3D-Objekte wird dann als Parameter übergeben (sind auch mehrere möglich). Wie gesagt, nur die 2 Dinge mussten ergänzt werden. Dann wird im selben Pfad die *.tkb Datei angelegt.

Beim Laden mittels der Model-Klasse gibt es aber immer noch Probleme:> Fehlermeldung:

In System.NotSupportedException ist eine Ausnahme vom Typ "SharpDX.Toolkit.Graphics.DLL" aufgetreten, doch wurde diese im Benutzercode nicht verarbeitet.

Zusätzliche Informationen: EffectData version [0x454E4F42] is not supported. Expecting [0x100]

Obwohl die ModelData-Klasse das Ordnungsgemäß (absolute Pfade!) laden kann!
Habe es selber ausprobiert.

Kenn ihr eine Möglichkeit die Daten von ModelData zu Model, ohne größeren Aufwand, zu übertragen?

5.658 Beiträge seit 2006
vor 10 Jahren

Also ich kenne mich mit der Implementierung des ModelLoaders nicht aus. Aber wenn du die Wahl hast, würde ich an deiner Stelle immer das .X-Format verwenden, denn das ist das einzige Format, das von DirectX nativ unterstützt wird. Deshalb benötigt man keine Konvertierung und umgeht eine eventuell fehlerhafte Implementierung.

Christian

Weeks of programming can save you hours of planning

G
garados001 Themenstarter:in
33 Beiträge seit 2012
vor 10 Jahren

Gib mir mal bitte ein schnelles Beispiel mit Model (mit *.x Datei). Mal sehen, ob es klappt 😃
Vielleicht mache ich da nur etwas falsch.

5.658 Beiträge seit 2006
vor 10 Jahren

Ich hab kein schnelles Beispiel, aber du kannst mit Bing oder Yahoo oder deiner Suchmaschine des Vertrauens danach googeln: Google-Suche nach loading x-file sharpdx

Alternativ kannst du ruhig mal in die Dokumentation schauen. Das geht alles wesentlich schneller, als extra hier danach fragen und andere für einen arbeiten lassen: Siehe auch [Hinweis] Wie poste ich richtig? (insb. Punkt 4b und 1.1).

Weeks of programming can save you hours of planning

G
garados001 Themenstarter:in
33 Beiträge seit 2012
vor 10 Jahren

Tschuldige, dass es so lange gedauert hat.
Hab mal weiter nachgesucht. Da schreibt ein Entwickler von SharpDX über einige Probleme über das Einbinden des x-Formats und dass es womöglich nicht implementiert werden kann ( Issue 73: D3DX Mesh, ProgressiveMesh and SkinnedMesh support ).
Hab auch noch herausgefunden, dass nur das kompilierte tkb-Format unterstützt wird. Dabei wird in der Datei eine Startsequenz in der Datei gesucht ("TKMD"), ist diese nicht vorhanden schlägt das Laden fehl (diese Info fand ich im Quellcode von SharpDX, gibt es bei google.code).
Zu den Quellcode: da habe herausgefunden, dass der von Google.Code veraltet ist (dort 2.5; aktuell 2.6), deswegen schlägt das Laden (EffectData-Fehler) fehl. Habe die tkmodel.exe mit der aktuellen Version neugeschrieben. Diese ist jetzt 100% kompatibel mit den normalen SharpDX-DLLs! Die ZIP davon kann man von http://uploaded.net/file/gu9g42zh herunterladen (und die VS-2012 Projektmappe von http://uploaded.net/file/0cb5bo76; den Link aus den alten Post könnt ihr vergessen). Hab da jetzt noch angefügt, dass die Pfade nicht unbedingt als Parameter beim Start überliefert werden müssen, sondern auch bei der Ausführung eingegeben werden können.

Hierbei funktioniert jetzt fast alles (außer der Textur, aber vielleicht findet man da etwas ...).

5.658 Beiträge seit 2006
vor 10 Jahren

Hi garados001,

gibt es eigentlich einen Grund, warum du SharpDX verwendest? Der Thread ist über ein Jahr alt und es klingt nicht so, als würde selbst so ein Basis-Feature wie das Laden einer .X-Datei in der nächsten Zeit implementiert werden. SlimDX unterstützt das von Anfang an, vielleicht solltest du lieber eine ausgereiftere Bibliothek verwenden.

Die ZIP davon kann man von
>
herunterladen (und die VS-2012 Projektmappe von
>
; den Link aus den alten Post könnt ihr vergessen). Hab da jetzt noch angefügt, dass die Pfade nicht unbedingt als Parameter beim Start überliefert werden müssen, sondern auch bei der Ausführung eingegeben werden können.

Hierbei funktioniert jetzt fast alles (außer der Textur, aber vielleicht findet man da etwas ...).

Falls du damit meinst, "ladet euch mal die Projektmappe runter, und schaut mal, warum die Textur nicht funktioniert", ist das ein Anliegen für die Jobbörse. Deinen Code zu debuggen und zu testen ist nicht Aufgabe des Forums! Das steht genauso auch in den Forenregeln, auf die du bereits mehrfach hingewiesen wurdest.

Christian

Weeks of programming can save you hours of planning