# JPCT textur problem



## Elrohir (23. Jan 2009)

Nabend,

Ich habe das allbekannte beispiel für die JPCT-Engine jetzt soweit abgeändert, dass es eigentlich möglich sein sollte, dort eigenen 3ds-files zu begutachten.... (Code im Anhang)
Allerdings muss ich feststellen, dass ich, wenn ich nur die 3ds-datei lade, keine textur angezeigt bekomme, in der Konsole jedoch steht, die Textur würde verarbeitet
(Processing new material Mat!
Texture named holz1.tif added to TextureManager!)

jedoch ist diese nur die ambient-beleuchtung und die farbe des einen lichts sichtbar...



```
Texture spot=new Texture(getClass().getClassLoader().getResourceAsStream("D:\\Java\\Thyâlae\\3D Modelle\\holz1.tif"),false);
     TextureManager.getInstance().addTexture("Mat", spot);

[...]



     testsubject.setTexture("Mat");
```
Fügte ich diesen code hinzu, erschien in der konsole am anfang: 


> Loading Texture...from InputStream
> [ Fri Jan 23 22:00:18 CET 2009 ] - ERROR: File not found - replacement texture used instead!


und das Objekt wurde gar nicht mehr angezeigt (vermutlich weil dann die eigentliche Textur durch die dummy-textur ersetzt wurde... -> das objekt wurde ja schon angezeigt, allerdings schwarz....


und nun wüsste ich gerne, wieso diese textur nicht geladen wird, bzw. wo der fehler liegt....
Denn wenn ich das 3ds-modell mit Cinema4D öffne, so wird das Modell mitsamt der textur angezeigt...
Und wie gesagt, in der Konsole steht ja, er würde die textur verarbeiten....


----------



## EgonOlsen (23. Jan 2009)

Probier es mal so:


```
Texture spot=new Texture("D:\\Java\\Thyâlae\\3D Modelle\\holz1.tif", false);
```

Mit getResourceAsStream(...) liest du aus dem Klassenpfad. In deinem Fall greift du aber direkt auf die Datei auf der Platte zu, da ist der andere Konstruktor richtig.


----------



## Elrohir (23. Jan 2009)

leider gibt er immer noch diese meldung aus:



> Loading Texture...D:\Java\Thyâlae\3D Modelle\holz1.tif
> [ Fri Jan 23 22:34:02 CET 2009 ] - ERROR: File not found - replacement texture used instead!



und es wird weiterhin komplett schwarz angezeigt...
Und sollte die Textur nicht sowieso direkt über das 3d modell geladen werden? (hier der komplette konsolenauszug


> Loading Texture...D:\Java\Thyâlae\3D Modelle\holz1.tif
> [ Fri Jan 23 22:34:02 CET 2009 ] - ERROR: File not found - replacement texture used instead!
> Loading file D:\Java\Thyâlae\3D Modelle\teststab.3ds
> File D:\Java\Thyâlae\3D Modelle\teststab.3ds loaded...60989 bytes
> ...



also, das problem besteht ja darin, dass er, wenn ich im anschluss des ladens noch einen setTexture() befehl absetze keine textur anzeigt, bzw. alles schwarz.... und wenn ich den befehl nicht absetze erscheint das object im ambient-light + schein der lichtquelle...


----------



## EgonOlsen (23. Jan 2009)

Wenn er das Bild nicht laden kann, stimmt irgendwas mit deinem Pfad nicht. Evtl. mag er das â nicht...ob Java von Haus aus TIFF liest, weiß ich jetzt auch nicht mit Sicherheit. Kannst ja mal JPG stattdessen probieren. 

Zu deiner anderen Frage: Nein, der Loader lädt die Texturen nicht. Er legt sie nur als Platzhalter an bzw. nimmt vorhandene mit dem Namen und weist sie zu. Korrekt wäre es, wenn du die Textur vorher lädst und dem TextureManager als "holz1.tif" bekannt gibst (egal, ob die Datei wirklich so heißt). Dann ändert sich die Meldung auch von "added to TextureManager" auf...habe ich vergessen, aber sie wird sich ändern. Die Grundidee ist, die Texturen so im Manager einzufügen, wie sie im 3DS heißen. Das explizite setTexture() kannst du dir dann auch sparen.


----------



## Elrohir (23. Jan 2009)

Ich könnt dich knuddeln *g*
Allerherzlichsten Dank jedenfalls...
Ich musste allerdings feststellen, dass das "â" kein problem darstellt 
Der Fehler lag lediglich darin, dass java kein .tif laden kann, und ich den Namen dann falsch übergeben habe..
also, mithilfe von:


```
Texture spot=new Texture("D:\\Java\\Thyâlae\\3D Modelle\\holz1.jpg",false);
     TextureManager.getInstance().addTexture("holz1.jpg", spot);
```
funktioniert es jetzt wunderbar 

Einziger nachteil jedoch, dass die Textur nur als Muster dargestellt wird, jedoch nicht die explizite farbe... diese wird über das light und das ambientlight verändert... kann man das abstellen?

EDIT: uh, weißes ambientlight...!


----------



## Elrohir (23. Jan 2009)

hm, jetzt habe ich leider noch ein weiteres problem..
undzwar wird die textur draufgespielt, jedoch nicht so, wie in Cinema4D, wo ich die textur als Flächen-mapping angegeben habe, und dann mit rechtsklick auf den textur tag -> UVW-Koordinaten erzeugen den UVW-Tag erzeugt habe, sondern völlig verwaschen... als würde diese textur auf das komplette objekt breitgezogen..


----------



## EgonOlsen (24. Jan 2009)

Weiß jetzt nicht genau, was du meinst (Screenshot?)...hast du es mal mit einem Aufruf von build() auf dem geladenen Objekt versucht?


----------



## Elrohir (24. Jan 2009)

so sieht das dann in etwa aus:

http://img232.imageshack.us/img232/9774/texturti2.jpg

und ja, ein .build() aufruf ist nach mergen aller teilobjekte vorhanden..


EDIT: ok, tut mir leid, habe meinen fehler entdeckt... ich durfte das Environment-Mapping dabei nicht enabled haben


----------



## EgonOlsen (24. Jan 2009)

Elrohir hat gesagt.:
			
		

> EDIT: ok, tut mir leid, habe meinen fehler entdeckt... ich durfte das Environment-Mapping dabei nicht enabled haben


Das stimmt...


----------

