[Assimp]Textur Dateiname

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
neon
Beiträge: 59
Registriert: 22.04.2011, 09:29

[Assimp]Textur Dateiname

Beitrag von neon »

Hallo,

ich benutze Assimp für meine 3D engine als converter für ein eigenes Format.
Bis jetzt find ich die Bibliothek wirklich gut, zumindest habe ich noch keine Alternative gefunden(ausser meine frühere Variante: alles selber zu implementieren).

Bei den meisten Models habe ich eine externe Textur(z.b. als jpg, tga etc.), leider find ich in der Dokumentation nicht, wie ich auf die Dateinamen zugreifen kann.
Kennt jemand eine Lösung?

Die nächste frage wäre, warum wird das Model für verschiedene Materials gesplittet, wäre es nicht praktischer z.b. startface Nummer mit der Anzahl der faces für das Material zu speichern? Somit gebe es auch eine eindeutige Zuordnung und man brauchte kein overheader, der mit einem neuen Modell verbunden ist.

Dann habe ich das Problem, dass wenn ich z.b. einen Würfel erstelle und das als z.b Obj Format exportiere, dann hat der Würfel 8 Vertices im Obj Format, wie es im Blender erstellt wurde.
Wenn ich aber das Model mit Assimp importiere um es zu konvertieren, dann dupliziert Assimp anscheinend die Vertices, so dass ich 36 statt 8 vertices habe, was natürlich immer eine erhebliche Vergrößerung von dem exportierten Modell bedeutet. Ist das ein Assimp problem oder beachtet ich irgendwelche Einstellungen/Parameter nicht?

Vielen Dank
Benutzeravatar
Aramis
Moderator
Beiträge: 1458
Registriert: 25.02.2009, 19:50
Echter Name: Alexander Gessler
Wohnort: 2016
Kontaktdaten:

Re: [Assimp]Textur Dateiname

Beitrag von Aramis »

Hallo und herzlich willkommen im Forum :-)
leider find ich in der Dokumentation nicht, wie ich auf die Dateinamen zugreifen kann.
Bei nicht eingebetteten Texturen laeuft das ueber aiMaterial und die dazugehoerenden Hilfsfunktionen: AI_MATKEY_TEXTURE_DIFFUSE(0) waere z.b. der Schluessel um auf den Pfad fuer die erste diffuse Textur zuzugreifen. Es gibt aber auch aiGetMaterialTexture bzw. aiGetMaterialTextureCount, die dir das Leben etwas einfacher machen und alle fuer dich relevanten Texturinformationen auf einen Schlag auslesen.
Ist das ein Assimp problem oder beachtet ich irgendwelche Einstellungen/Parameter nicht?
Gibt aiProcess_JoinIdenticalVertices an. Es war eine Designentscheidung intern nur mit ungeteilten Vertices zu arbeiten und sie erst am Ende, nachdem alle Nachbearbeitungen erledigt sind, wieder zusammenzufuegen. Ueberhaupt solltest du dir mal die ganzen Postprocessing-Flags angucken (oder eines der aiProcessPreset-Flags angeben).
wäre es nicht praktischer z.b. startface Nummer mit der Anzahl der faces für das Material zu speichern?
Zum Rendern musst du dann ja sowieso nach Materialien sortieren. Diese Trennung bereits in unseren Datenstrukturen vorzunehmen war eine anfaengliche Designentscheidung, die sich leider nicht mehr so leicht aendern laesst.

Gruss, Alex
neon
Beiträge: 59
Registriert: 22.04.2011, 09:29

Re: [Assimp]Textur Dateiname

Beitrag von neon »

Danke für deine Antwort,

die AI_MATKEY_TEXTURE_DIFFUSE hab ich wohl übersehen, das hilft weiter.

hab vergessen meine Flags zu posten:

Code: Alles auswählen

aiProcess_Triangulate | aiProcess_MakeLeftHanded | 
	aiProcess_FlipWindingOrder | aiProcess_GenSmoothNormals | 
	aiProcess_RemoveRedundantMaterials | aiProcess_OptimizeMeshes | 
	 aiProcess_SortByPType | aiProcess_JoinIdenticalVertices
Damit kriege ich bei einem 8 Vertex Würfel im Obj Format, 24 Vertices durch mNumVertices angezeigt.
aiProcess_JoinIdenticalVertices ist angegeben.
Der Würfel ist ein default Würfel, der beim Blenderstart automatisch erstellt wird.
Benutzeravatar
Krishty
Establishment
Beiträge: 8268
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [Assimp]Textur Dateiname

Beitrag von Krishty »

Ich weiß nicht, bis zu welchem Kantenwinkel aiProcess_GenSmoothNormals glättet – aber normalerweise braucht man für einen Würfel auch tatsächlich 24 Vertices, weil sich die Eckpunkte ja nicht eine Normale teilen sondern für jede angrenzende Fläche mit einem anderen Normalenvektor instanziert werden müssen.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
neon
Beiträge: 59
Registriert: 22.04.2011, 09:29

Re: [Assimp]Textur Dateiname

Beitrag von neon »

Stimmt, da hast du recht, aber laut Doku funktioniert das Flag nur, wenn keine Normals vorhanden sind.
Beim Blender werden aber automatisch Normals pro Vertex generiert.

Hab probiert ohne weitere Flags nur mit "aiProcess_Triangulate | aiProcess_JoinIdenticalVertices", da kommen auch 24 Vertices raus.


Edit: ok, hat sich geklärt. Wegen dem eingestellten hard shading im Blender wurden natürlich mehrere Vertices für die Normals benötigt. Mit smooth shading sind das jetzt richtigerweise 8 Vertices.
Zuletzt geändert von neon am 22.04.2011, 14:32, insgesamt 2-mal geändert.
Benutzeravatar
Aramis
Moderator
Beiträge: 1458
Registriert: 25.02.2009, 19:50
Echter Name: Alexander Gessler
Wohnort: 2016
Kontaktdaten:

Re: [Assimp]Textur Dateiname

Beitrag von Aramis »

Wenn Blender fuer den Wuerfel ungeglaettete Normalen generiert hat, sind 24 Vertices die korrekte Ausgabe. aiProcess_GenSmoothNormals wird tatsaechlich erst aktiv wenn keine Normalen im Quellfile sind (was sich allerdings erzwingen laesst indem man den aiProcess_RemoveComponent-Step die alten Normalen vorher wegloeschen laesst …).
Antworten