# Textur laden auf ein eingelesenes 3D Objekt



## geeko (24. Apr 2007)

Hi zusammen,

hab ein 3D Model das ich gern mit ner Textur versehen würde, jedoch klappt das nicht so recht... =(

Das laden der. obj file mit dem Standard ObjectLoader von Java3D klappt, irgendwie kapier ich nur nicht wie ich die Textur drauf kriege. 
Ist sicherlich ein ganz poliges Problem leider hab ich mit Java3D noch nicht sooo viel gemacht.

wäre scht nett wenn mir jemand weitehelfen könnte!!

gruß
geeko


----------



## merlin2 (27. Apr 2007)

Du fügst der Appearance des Objekts eine Textur folgendermaßen hinzu(wie jedem anderen Objekt):

```
//Zusätzlicher Import:
import com.sun.j3d.utils.image.*;
//...
app.setTexture((new TextureLoader("textur.jpg",null)).getTexture());
//...
```
Genaueres sollte in deinem Tutorial/Handbuch stehen.


----------



## Guest (29. Apr 2007)

super danke!!


----------



## geeko (30. Apr 2007)

Das beantwortet nicht ganz meine Frage 

Ich habe ja ein 3D Model eingeladen und erstelle ja keinen cube oder sowas dem ich die app mitgeben kann.
Oder is das bei scene Objekten auch irgendwie möglich?!!

Das 3D Model steckt in meinem scene Objekt das ich dann an ne TG hänge und wie kann ich dazwischen ne app mitgeben ?! 

Steh aufm Schlauch... 

gruß
Geeko


----------



## merlin2 (30. Apr 2007)

Hab den folgenden Code aus einem Buch und da hat man eine Appearance...


```
import javax.vecmath.*;
import com.sun.j3d.utils.universe.*;
import javax.media.j3d.*;
import com.sun.j3d.utils.behaviors.vp.*;
import javax.swing.JFrame;
import com.sun.j3d.loaders.*;
import com.sun.j3d.loaders.objectfile.*;
import java.util.Hashtable;



/**
* Beispiel fuer das Laden eines geometrischen Objekts, das nicht angezeigt
* wird. Es wird nur ein Teilobjekt aus dem geladenen Objekt dargestellt.
*
* @author Frank Klawonn
* Letzte Aenderung 07.07.2005
*/
public class Extract3DExample extends JFrame
{

  //Der Canvas, auf den gezeichnet wird.
  public Canvas3D myCanvas3D;


  public Extract3DExample()
  {

    //Mechanismus zum Schliessen des Fensters und beenden des Programms
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


    //Standardeinstellung fuer das Betrachteruniversum
    myCanvas3D = new Canvas3D(SimpleUniverse.getPreferredConfiguration());


    //Aufbau des SimpleUniverse:
    //Zuerst Erzeugen zusammen mit dem Canvas
    SimpleUniverse simpUniv = new SimpleUniverse(myCanvas3D);


    //Standardpositionierung des Betrachters
    simpUniv.getViewingPlatform().setNominalViewingTransform();


    //Die Szene wird in dieser Methode erzeugt.
    createSceneGraph(simpUniv);


    //Hinzufuegen von Licht
    addLight(simpUniv);


    //Hierdurch kann man mit der Maus den Betrachterstandpunkt veraendern
    OrbitBehavior ob = new OrbitBehavior(myCanvas3D);
    ob.setSchedulingBounds(new BoundingSphere(new Point3d(0.0,0.0,0.0),Double.MAX_VALUE));
    simpUniv.getViewingPlatform().setViewPlatformBehavior(ob);


    //Darstellung des Canvas/Fensters:
    setTitle("Ein aus einer Datei geladenes Objekt");
    setSize(700,700);
    getContentPane().add("Center", myCanvas3D);
    setVisible(true);


  }




  public static void main(String[] args)
  {
     Extract3DExample e3de = new Extract3DExample();
  }





  //In dieser Methode werden die Objekte der Szene aufgebaut und dem
  //SimpleUniverse su hinzugefuegt.
  public void createSceneGraph(SimpleUniverse su)
  {



    //Laden einer obj-Datei:
    ObjectFile f = new ObjectFile(ObjectFile.RESIZE);
    Scene s = null;

    try
    {
      s = f.load("schiff.obj");
    }
    catch (Exception e)
    {
      System.out.println("File loading failed:" + e);
    }














    //Auswaehlen des Teilobjekts
    Hashtable namedObjects = s.getNamedObjects();
    Shape3D partOfTheObject = (Shape3D) namedObjects.get("schiffsrumpf");

    //Erstellen einer Kopie des ausgewaehlten Teilobjekts
    Shape3D extractedObject = (Shape3D) partOfTheObject.cloneTree();

    //Einfaerben des Teilobjekts in Blau
    Appearance lightBlueApp = new Appearance();
    setToMyDefaultAppearance(lightBlueApp,new Color3f(0.0f,0.1f,0.3f));
    extractedObject.setAppearance(lightBlueApp);

    //Zuordnen des eingefaerbten Teilobjekts zu einer Transformationsgruppe
    Transform3D tfObject = new Transform3D();
    tfObject.rotZ(0.4*Math.PI);
    Transform3D xRotation = new Transform3D();
    xRotation.rotY(0.4*Math.PI);
    tfObject.mul(xRotation);
    TransformGroup tgObject = new TransformGroup(tfObject);

    tgObject.addChild(extractedObject);

    BranchGroup theScene = new BranchGroup();

    //Hinzufuegen der transformationsgruppe mit dem blauen Teilobjekt zur Szene
    theScene.addChild(tgObject);


    //Die folgenden drei Zeilen erzeugen einen weißen Hintergrund.
    Background bg = new Background(new Color3f(1.0f,1.0f,1.0f));
    BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0),Double.MAX_VALUE);
    bg.setApplicationBounds(bounds);
    theScene.addChild(bg);



    theScene.compile();

    //Hinzufuegen der Szene
    su.addBranchGraph(theScene);
  }


  /**
  * Erzeugt eine Standardoberflaechenstruktur in einer gewuenschten Farbe
  *
  * @param app      Die Appearance, mit der die Oberflaeche belegt werden soll
  * @param col      Die gewuenschte Farbe
  */
  public static void setToMyDefaultAppearance(Appearance app, Color3f col)
  {
    app.setMaterial(new Material(col,col,col,col,120.0f));
  }



  //Hier wird etwas Licht zu der Szene hinzugefuegt.
  public void addLight(SimpleUniverse su)
  {

    BranchGroup bgLight = new BranchGroup();

    BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0);
    Color3f lightColour1 = new Color3f(1.0f,1.0f,1.0f);
    Vector3f lightDir1  = new Vector3f(-1.0f,0.0f,-0.5f);
    DirectionalLight light1 = new DirectionalLight(lightColour1, lightDir1);
    light1.setInfluencingBounds(bounds);

    bgLight.addChild(light1);
    su.addBranchGraph(bgLight);
  }



}
```


----------

