# Java3D Texture Mapping



## ChrisKu (19. Nov 2011)

Hallo Zusammen,

ich habe ein Problem mit dem Java3D Texture Mapping. Ich habe eine einfache Ebenee, auf die ein Bild als Texture gemappt werden soll. Die Texture wird auch angezeigt, nur spiegelverkehrt. 

Die Ebene habe ich in Blender erstellt und dort die Texture Koordinaten auch manuell überprüft. Die Koordinaten müssten eigentlich richtig sein, nur erfolgt die Anzeige eben spiegelverkehrt.

Hier die Methode, wo das Mapping erfolgt.


```
private void loadObject4() {
        this.fCoords = new float[]{1f, 0f, -1f, -1f, 0f, -1f, -1f, 0f, 1f, 1f, 0f, 1f};
        this.indexes = new int[]{0, 1, 2, 0, 2, 3};
        this.fNorms = new float[]{0f, 1f, 0f, 0f, 1f, 0f, 0f, 1f, 0f, 0f, 1f, 0f};
        this.fTex = new float[]{0f, 1f, 1f, 1f, 1f, 0f, 0f, 0f};

        javax.media.j3d.IndexedTriangleArray mesh = new javax.media.j3d.IndexedTriangleArray(fCoords.length / 3, IndexedTriangleArray.COORDINATES
                | IndexedTriangleArray.NORMALS | IndexedTriangleArray.BY_REFERENCE
                | IndexedTriangleArray.BY_REFERENCE_INDICES | IndexedTriangleArray.USE_COORD_INDEX_ONLY
                | IndexedTriangleArray.TEXTURE_COORDINATE_2, indexes.length);
        mesh.setCoordRefFloat(fCoords);
        mesh.setCoordIndicesRef(indexes);
        mesh.setNormalRefFloat(fNorms);
        mesh.setTexCoordRefFloat(0, fTex);
        shape = new Shape3D(mesh);

        TextureLoader myLoader = new TextureLoader("models/pic.png", this);
        ImageComponent2D myImage = myLoader.getImage();
        

        Texture2D myTex = new javax.media.j3d.Texture2D(Texture2D.BASE_LEVEL, Texture2D.RGB, myImage.getWidth(), myImage.getHeight());
        myTex.setImage(0, myImage);
        myTex.setEnable(true);

        Material mat = new Material();

        Appearance app = new javax.media.j3d.Appearance();
        app.setMaterial(mat);
        app.setTexture(myTex);
        shape.setAppearance(app);

        // position the object
        Transform3D t3d = new Transform3D();
        //t3d.rotZ(Math.PI / 2);
        t3d.setTranslation(new Vector3f(0f, 1f, 0));
        TransformGroup tg = new TransformGroup(t3d);
        tg.addChild(shape);
        sceneBG.addChild(tg);
    }
```
Hat jemand eine Idee?

Vielen Dank!

Chris


----------



## Marco13 (19. Nov 2011)

Ist anhand der Zahlen jetzt ein bißchen mühsam nachzuvollziehen... Glaubst du, dass das wirklich ein Fehler ist? Kannst ja mal versuchen, dir das ganze aufzumalen... nur um sicher zu sein, dass du nicht von der falschen Seite draufschaust


----------



## ChrisKu (19. Nov 2011)

Danke für die schnelle Antwort, es war tatsächlich ein anderer Fehler. Die Koordinaten kamen aus einem Export von Blender und ich hatte nicht beachtet, dass die Blender Y - Achse von mir weg zeigt 

Schon peinlich, x - mal überprüft....manchmal braucht man doch den kleinen Anstoss von außen, damit sich die Augen öffnen.

Vor dem Export die UV Koordinaten in Blender um die Y - Achse spiegeln, dann klappt es.


----------

