D3DCOMPILER_47.dll / Output
#1
Question 
Hallo liebe MURLs!

1) Irgendeine Idee warum das so sein könnte...
win32\vs2013\Release\Scene_converter.exe fehlt D3DCOMPILER_47.dll

2)
win32\vs2010\Release\Scene_converter.exe läuft zwar ohne Fehler durch, schreibt aber keinen Output bzw. ich weiß nicht mal wie oder wo ich einen Outputdatei-Namen angeben könnte. Mit -lv startet kein Scene-Viewer nach der Konvertierung. Zur Info: Input ist *.blend

3)
für irgendein komplexeres 3d-Objekt als einen Würfel brauch ich den Konverter aber oder verstehe ich da was falsch?

Vielen Dank fürs erste.

LG Didi
Reply
#2
Apost 
Hallo Didi!

Quote:1) Irgendeine Idee warum das so sein könnte...
win32\vs2013\Release\Scene_converter.exe fehlt D3DCOMPILER_47.dll

Die D3DCOMPILER_47.dll ist Teil von Windows 8.1 bzw. vom Windows 8.1 Platform SDK. Wenn du unter Windows 7 oder 8 mit Visual Studio 2013 entwickelst, kann es sein dass die DLL nicht gefunden wird, weil sie nicht im Systempfad ist. Hier findest du die DLL bei einer Standardinstallation der VS2013 Community Edition:
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\D3Dcompiler_47.dll

Am einfachsten ist es, die Datei einfach ins Verzeichnis murl\base\binaries\win32\vs2013\Release reinzukopieren.

Alternativ kannst du auch das VS2010-Kompilat des Tools verwenden, unter
win32\vs2010\Release\Scene_converter.exe

Die Funktionalität ist im Prinzip dieselbe, die VS2010-Version verwendet allerdings die (ältere) D3DCOMPILER_43.dll. Sollte aber in den meisten Fällen kein Problem darstellen.

Quote:2)
win32\vs2010\Release\Scene_converter.exe läuft zwar ohne Fehler durch, schreibt aber keinen Output bzw. ich weiß nicht mal wie oder wo ich einen Outputdatei-Namen angeben könnte. Mit -lv startet kein Scene-Viewer nach der Konvertierung. Zur Info: Input ist *.blend 

Der Scene Converter erwartet als Input ein Konfigurations-XML-File, das alle Input- und Output-Dateien beschreibt, sowie allfällige Modifikationsregeln.

Im simpelsten Fall sieht so eine Datei wie folgt aus:
<?xml version="1.0"?>
<!-- Copyright 2013 Spraylight GmbH -->

<SceneConverter>
    
  <InputScene fileName="my_model.fbx">
    <ImageLocation pathName="./textures"/>
  </InputScene>

  <OutputPackage fileName="./converted/my_model" packageId="MyModel" createFolders="yes">
    <GraphInstance graphId="MyInstance" filePrefix="my_instance" generateMeshes="yes"/>
  </OutputPackage>

</SceneConverter>

Die Konfigurationsdatei veranlasst den Konverter, die FBX-Datei "my_model.fbx" vom aktuellen Verzeichnis zu laden (relativ zum Konfigurationsfile), und ein Output-Package namens "my_model.murlres" im Verzeichnis "./converted" zu erstellen.

Im Szenengraphen kann dann eine Instanz des konvertierten Modells zB so erzeugt werden, nachdem das erzeugte Paket geladen wurde:
<Instance graphResourceId="/MyModel/MyInstance"/>

Eine eingehende Beschreibung der Konfigurations-Dateien für den Szenenkonverter steht recht hoch oben auf unserer TODO-Liste; ich werde versuchen in den nächsten Tagen einen kurzen Abriss über die wichtigsten Elemente hier zu posten.

Noch eine Anmerkung: Der Szenenkonverter verwendet die Open-Source Library "AssImp" zum Importieren diverser Formate, darunter auch .blend Dateien. Das letzte Update der Library hat allerdings einen Import-Fehler mitgebracht, sodass sich die meisten Blender-Dateien nicht mehr direkt laden lassen. Der Fehler ist auch den Entwicklern der Library bekannt (und meines Wissens nach auch schon behoben), der Fix wird allerdings erst in einem der nächsten Murl-Updates drin sein.

Es gibt aber immer noch die Möglichkeit, zB mittels Blender-FBX-Exporter zuerst auf FBX zu konvertieren, und dann den Szenenkonverter mit dieser FBX-Datei zu füttern. Ist meines Erachtens nach sogar die robustere Variante. 

Quote:3)
für irgendein komplexeres 3d-Objekt als einen Würfel brauch ich den Konverter aber oder verstehe ich da was falsch?

Der Konverter ist auf alle Fälle nützlich, da er eine Menge an gängigen 3D-Formaten unterstützt und die konvertierten Szenen direkt verwendbar sind.

Eine weitere Möglichkeit ist, mittels Graph::GenericGeometry-Knoten beliebige 3D-Objekte zur Laufzeit zu erzeugen, beispielsweise prozedural oder über einen selbstgeschriebenen Loader. 

Zu guter Letzt ist es auch möglich, eine eigene Ressourcen-Klasse zu programmieren, die das Resource::IMesh-Interface implementiert. Eine solche Klasse könnte dann auch ein direktes Laden von zB .blend-Files ermöglichen. Das ist allerdings der aufwändigste Weg.

Wenns Unklarheiten gibt, einfach nochmal nachfragen. Nach den Feiertagen sollten die Antwortzeiten wieder ein bisschen kürzer sein Wink

LG

dizzy
Reply


Forum Jump:


Copyright © 2011-2017 Spraylight GmbH.