Jump to content
Unity Insider Forum

Assets obj Laoder


UnityProband

Recommended Posts

Hallo liebe Unity Freunde!

 

Ich habe mir im Asset Store diesen obj Objekt Loader fuer den Realtime Import von 3D-Geometrie importiert. Der Import hat auch funktioniert, aber wenn ich das jeweilige Material bzw. die Texturen des Objects nutzen moechte, dann funktioniert das alles nicht mehr. Oder ist da ein Denkfehler bei mir.

 

Folgender Code:

 

mat = new Material[OBJLoader.LoadMTLFile ("/Users/olschewski/AffeundTextur.mtl").Length];
 mat = OBJLoader.LoadMTLFile ("/Users/olschewski/AffeundTextur.mtl");

 Debug.Log (OBJLoader.LoadMTLFile ("/Users/olschewski/AffeundTextur.mtl").Length);
 Debug.Log (mat[0].GetFloat("_Mode"));
 newTex = TextureLoader.LoadTGA("/Users/olschewski/Affe.tga");

 go = new GameObject[3];
 for(int i=0;i<3;i++){


  go[i] = OBJLoader.LoadOBJFile("/Users/olschewski/AffeundTextur.obj");
  go[i].AddComponent <MeshFilter>();
  go[i].AddComponent <MeshRenderer>();
  go[i].GetComponent<Renderer> ().material.SetFloat("_Mode", 1.0f);

  go[i].GetComponent<Renderer> ().material.mainTexture = newTex;

  go[i].transform.localPosition = new Vector3((float)i+(float)i, 0.0f, 0.0f);
  go [i].transform.localRotation = Quaternion.Euler(new Vector3(0.0f, 180.0f, 0.0f));
 }

 

Aendere ich aber bei aktiver Applikation im inspector den Shadermode des Materials von Transparent auf Opaque, dann werden die 3D-Objekte visualisiert. Muss ich vielleicht noch eine entsprechende Funktion aufrufen, wie CalculateNormals, oder?

 

Ueber Infos wuerde ich mich sehr freuen.

 

VG

Link zu diesem Kommentar
Auf anderen Seiten teilen

Da sind einige echt krumme Sachen im Code. So als Beispiel:

mat = new Material[OBJLoader.LoadMTLFile ("/Users/olschewski/AffeundTextur.mtl").Length];
 mat = OBJLoader.LoadMTLFile ("/Users/olschewski/AffeundTextur.mtl");

Die obere Zeile erfüllt keinen Zweck, außer Zeit zu kosten. Kann weg.

 

Was mich aber viel mehr wundert:

go[i] = OBJLoader.LoadOBJFile("/Users/olschewski/AffeundTextur.obj");
  go[i].AddComponent <MeshFilter>();
  go[i].AddComponent <MeshRenderer>();

LoadOBJFile gibt ein GameObject zurück? Warum tut es das?

Und warum hat dieses GameObject noch keinen MeshFilter/MeshRenderer?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo!

 

Was soll daran krumm sein?

 

mat = new Material[OBJLoader.LoadMTLFile ("/Users/olschewski/AffeundTextur.mtl").Length];
 mat = OBJLoader.LoadMTLFile ("/Users/olschewski/AffeundTextur.mtl");

 

Es erfüllt doch den Zweck für einen Test! Die statische Funktion OBJLoader..LoadMTLFile liefert mir ein Array des entsprechenden Materials zurück!

 

LoadOBJFile gibt ein GameObject zurück? Warum tut es das?

 

Keine Ahnung! Es steht so in der Beschreibung!

 

Und warum hat dieses GameObject noch keinen MeshFilter/MeshRenderer?

 

Das hatte mich auch gewundert!

 

Wie geschrieben funktioniert ja die importierte Funktionalität des Realtime Importes, aber nur wenn ich das Material bzw. die Textur nicht hinzufüge. Ich muss jetzt unter dem Inspector den Shader-Mode umstellen, dann wird das importierte Objekt mit Textur korrekt visualisiert!

 

VG

Link zu diesem Kommentar
Auf anderen Seiten teilen

Es erfüllt doch den Zweck für einen Test! Die statische Funktion OBJLoader..LoadMTLFile liefert mir ein Array des entsprechenden Materials zurück!

Die erste der beiden Zeilen erfüllt exakt gar keinen Zweck :)

 

Du musst dir Gedanken machen, was du da tust und warum. Mit der Einstellung "Ich probiere so lange rum bis es funktioniert und bleibe dann bei der ersten Lösung, mit der Dinge funktionieren" wirst du immer wieder in Situationen wie die jetzige kommen, in der du keine Ahnung hast, warum andere Dinge plötzlich nicht mehr funktionieren.

Setze dich also mal mit deinem Code auseinander, und auch mit dem Paket, was du da benutzt. Wenn möglich, schau in dessen Quellcode und versuche zu verstehen, was da passiert.

 

Von da aus kannst du dann nämlich die Einzelteile finden, die da zusammengefügt werden und die genaue Stelle ermitteln, an der das Material falsch erstellt, zugewiesen oder verändert wird. An dieser Stelle kannst du deinen Code dann reparieren.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...