Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

23.01.2011, 13:31

Assimp lädt Model aber keine Texturen

Hallo,

ich arbeite Seit einigen Wochen an einem FPS. Um 3D-Modelle zu laden habe ich mich für die assimp lib entschieden (Da ich schon in ein paar Threads in diesem Forum davon gelesen habe). Ich habe den code vom "SimpleOpenGL" (siehe link ) in mein Projekt eingebunden.

Jetzt zu meinem Problem: Ich sehe zwar das 3D-Modell (habe ein .obj mit .mtl und .jpg) aber keine Texturen darauf. Ich habe den beispielcode auch noch nicht 100% verstanden. Kann es sein, dass überhaupt keine Texturen mit gerendert werden? Wenn ja, kann mir jemand ein kleines bsp. dafür geben, wie ich die Texturangaben von assimp am besten mit openGL auf das Model bekomme?

Danke
gruß
crazyTron

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

23.01.2011, 13:36

Also ich seh nirgendwo in dem Code eine Zeile wo eine Textur geladen würde. Ich kenn Assimp zwar nicht aber laut Doku bekommst du wohl nur die rohen Texturdaten, um alles weitere musst du dich selber kümmern.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dot« (23.01.2011, 13:41)


3

23.01.2011, 13:43

wofür ist dann die Methode "apply_material" gut? Lädt die nur Farben?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

23.01.2011, 14:13

Jap.

5

23.01.2011, 14:26

Ah, ok danke.
Ich bin noch nicht so vertraut mit openGL und habe einfach mal Material mit Texture gleichgesezt :thumbdown:
Kennst du vielleicht gute Codebeispiele wie man Texturen mit assimp lädt und auch in opengl rendert? (Ich mag lieber codebeispiele als ne doku :whistling: )

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

23.01.2011, 14:33

Leider kenn ich keine Codebeispiele. Aber wenn du von OpenGL noch keine Ahnung hast dann würd ich dir mal raten erstmal die Grundlagen von OpenGL zu lernen bevor du hier mir Assimp weitermachst. Assimp ist allerfrühestens dann interessant wenn du mal einen rotierenden Würfel mit ner Textur drauf rein in OpenGL selbst gemacht hast.

7

23.01.2011, 15:01

"Noch nicht so vertraut" sollte nicht heißen, dass ich noch nichts mit OpenGL gemacht habe ;)
Einen rotierenden würfel mit Texturen hatte ich auch mal gemacht (sogar mit Transparenz und - schlechtem - Nebel).
Ich hab für meinen FPS auch schon einen kleinen Testraum, mit Texturen an den wänden und verschiedenfarbigen Quadern für Gegner und Mitspieler (alles hardcodet). Das spiel im Multiplayer geht auch schon. Man läuft zusammen durch die Karte, kann auf die gegner schießen und wird 10 sek nach einem Treffer "wiederbelebt".

Bis jetzt hab ich alles selbst gecodet und wollte auch den ModelLoader komplet selber schreiben. Im laufe des Projekts hab ich aber gemerkt, dass man alleine ganz schön viel zu tun hat ^^
Ich kann mich im Moment gar nicht richtig entscheiden an welcher Baustelle ich weitermachen soll :lol:
Und da mich meine Testspieler immer mit dem Anliegen "bessere Grafik, Quader sehn scheiße aus" nervern, hab ich beschlossen vorerst eine Lib zum Laden der Objekte zu verwenden und später wenn das Spiel einigermaßen fertig ist durch eine eigene zu ersetzen.

Das war nur mal ein kleiner Ausschweif zu meinem Projektstand :D

Würde mich immer noch freuen, wenn jemand gute Codebeispiele kennt (ich wollte nicht so viel Zeit in das laden von Meshs stecken, weil mich andere Teile der Spieleprogrammierung einfach mehr interessieren und man eben nicht alles auf einmal machen kann)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

23.01.2011, 15:02

Cool, aber dann weißt du doch eh wie man in OpenGL Texturen verwendet, wo liegt das Problem!?

(ich wollte nicht so viel Zeit in das laden von Meshs stecken, weil mich andere Teile der Spieleprogrammierung einfach mehr interessieren und man eben nicht alles auf einmal machen kann)

Wenn das so ist, hast du schonmal drüber nachgedacht vielleicht eine fertige Engine zu verwenden?

9

23.01.2011, 15:47

Evt. könntest du mal bei http://developia.zfx.info schauen/fragen. Dort sind die Assimp Experten/Macher AFAIK etwas häufiger unterwegs - wir haben auch schon recht viele Beiträge zu Assimp...

Also ich habe Assimp nur mal auf dem iPhone benutzt. Die Texturen habe ich selbst geladen. Das Ermitteln des Dateipfades für die Diffuse-Textur sieht da ungefähr so aus (ist in Objective-C & C++):

C-/C++-Quelltext

1
2
3
4
5
aiString *texturePath=new aiString();
aiTextureMapping textureMapping;
base=material;
material->GetTexture(aiTextureType_DIFFUSE,0,texturePath,&textureMapping,&texCoordChannel,NULL,NULL,NULL);
texName=[[NSString stringWithUTF8String:(const char*)texturePath->data] retain];

Ich hab mir einfach Wrapperklassen für die ganzen Assimp-Objekte gebaut, die dann noch Sachen wie OpenGL-Adresse der Textur oder der Vertex-Buffer usw. enthalten.
PS: Die Materialien selbst bekommt man aus dem Array mMaterials der Assimp-Szene.
PPS: aiTexture wird AFAIK nur für eingebettete Texturen benutzt.

Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »Chromanoid« (23.01.2011, 17:46)


10

23.01.2011, 18:24

hmm... also was ich bis jetzt mit Texturen gemacht hab: Ich hatte ein quadrat, oder zwei Dreiecke und hab da eine Textur drauf gelegt.
Bei einem komplexen Model gibt es aber nur eine Bilddatei, die dann über den gesammten Mesh gespannt wird. Und da fehlt mir im Moment noch die Herangehensweise (also wie ich ein Bild über (sehr) viele Fläschen spanne).
Gibt es da keine fertige Klasse die ein Modell, dass mit Assimp geladen wurde zeichnet?
Wie gesagt, ich möchte mich die nächste Zeit lieber mit der Physik und Netzwerkkommunikation beschäftigen und hab die Grafik hinten angestellt. Währe aber trozdem schön, wenn ich ohne großen Aufwand und ohne mich in Spezifikation von Dateiformaten einlesen zu müssen ein Model laden kann. Das Auge isst schließlich mit ^^

Werbeanzeige