Auslesen des Material-Namens in Assimp

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Benutzeravatar
Top-OR
Establishment
Beiträge: 330
Registriert: 02.03.2011, 16:32
Echter Name: Jens H.
Wohnort: Esslingen/Dessau
Kontaktdaten:

Auslesen des Material-Namens in Assimp

Beitrag von Top-OR »

Moin Spezialisten,

ich beschäftige mich gerade mit lib Assimp, welche ich in ein (Zitat Schrompf) „esoterisches Kommandozeilentool“ einbinden will. Dieses Tools führt Datenkonvertierung u.A. im 3D-Bereich durch. [deswegen Assimp ;-) ]

Es klappt alles soweit ganz gut, nur beim Auslesen der Materialien stehe ich scheinbar ein wenig auf einer eigenen Stromleitung. Auch dies funktioniert bereits, aber ich habe den Eindruck, dass ich Dinge mache, die so nicht gedacht sind – leider habe ich bisher keine andere Möglichkeit gefunden.

Falls ich in der Doku/Samples was übersehen habe, bitte ich um Nachsicht.

Also, so läufts:
Ich latsche hier durch alle Materialien und möchte den NAMEN – (nicht Speculartextur oder weiß der Geier was) haben. Momentan mache ich das:

Code: Alles auswählen

…
for (unsigned int MCnt=0; MCnt<iScene->mNumMaterials; MCnt++) {
aiMaterial* _Material = iScene->mMaterials[MCnt];
aiString _MaterialName;
_Material->Get("?mat.name",0,0,_MaterialName);
…
}
Ich glaube aber, dass die „Query“ mit dem „?mat.name“ nicht so gedacht ist, oder? Gibt’s ne elegantere Möglichkeit, das zu tun? Fliegt mir das in der nächsten assimp Version um die Ohren oder wird alles gut?
--
Verallgemeinerungen sind IMMER falsch.
Benutzeravatar
Aramis
Moderator
Beiträge: 1458
Registriert: 25.02.2009, 19:50
Echter Name: Alexander Gessler
Wohnort: 2016
Kontaktdaten:

Re: Auslesen des Material-Namens in Assimp

Beitrag von Aramis »

Es gibt dafuer das AI_MATKEY_NAME define, das auch noch die beiden 0en enthaelt. Der Aufruf lautet dann also:

Code: Alles auswählen

Get(AI_MATKEY_NAME,_MaterialName)
(wie es zu diesem HACK mit dem Makro kam? … es hat sich evolutionaer entwickelt und ich schaeme mich dafuer)

Das erste Zeichen des Material-Keys hat eine gesonderte, interne Bedeutung (Assimp's Postprocessing Pipeline betrachtet zwei Materialien auch dann als aequivalent wenn mit einem Fragezeichen beginnende Materialeigenschaften voneinander abweichen) - daher das etwas komische Format.

Es handelt sich dabei aber um nichts, was 'subject to change' waere. Auch die von unsere Kommandozeilentool generierten dump-Dateien verwenden die Keynamen. Abgesehen davon, dass das Makro bequemer ist, kannst du die problemlos verwenden.
Benutzeravatar
Top-OR
Establishment
Beiträge: 330
Registriert: 02.03.2011, 16:32
Echter Name: Jens H.
Wohnort: Esslingen/Dessau
Kontaktdaten:

Re: Auslesen des Material-Namens in Assimp

Beitrag von Top-OR »

Okay, zunächst danke für die sehr schnelle Antwort. Freut mich, dass das so okay ist und ich nicht an der korrekten Schnittstelle vorbei auslese. Das wäre nicht das erste Mal.

Das Makro AI_MATKEY_NAME muss ich irgendwie übersehen haben. Ich habe das „?mat.name“ durchs manuelle Auslesen und Dumpen der Properties „gefunden“. Naja, ich machs mir manchmal schwerer, als es sein muss. Frag nicht nach Sonnenschein.

Ansonsten muss ich euch meinerseits noch zu Assimp „preisen und huldigen“. vgl. Quelle:


Ne, im Ernst. Ich hab ja auch schon ein paar Loader für u.a. Q3BSP, MD5MESH/MD5ANIM, B3D, OBJ/MTL gebaut, aber so ordentlich wie Assimp (abstrahiert in einer dedizierten Lib mit brauchbarer Doku und Samples etc. ) habe ich das noch nicht zusammengestrickt. Da muss euch nix peilich sein!

Ich habe zwar am Anfang mit Assimp etwas rumfriemeln müssen, weil in meiner Welt y-und-z „vertauscht“ sind, aber nun läufts ganz gut. Assimp wird meiner Toolchain wirklich gut tun!

Danke, habt ihr gut gemacht!
--
Verallgemeinerungen sind IMMER falsch.
Antworten