# TexturePaint Isometrische Darstellung



## Eichelhäer (26. Apr 2021)

Hallo,
ich habe mir mit der graphics2D api ein isometrisches spielfeld erstellt. Die tiles sind blöcke und jede seite ist mit einer anderen Farbe mittels testurepaint belegt( bottom,top,etc..) und können mit der maus korrekt ausgewählt werden (also nur die bottom tiles blockspezifisch isses noch nicht möglich). Nun möchte ich mittels texture paint unterschiedliche texturen auf die einzelnen Shapes setzten was auch geht. Allerdings ist die darstellung schlichtweg falsch. Soll heißen, dass die texturen einfach als rechteck draufgeklatscht werden und nicht etwa perspektivisch. Nun habe ich ein Rectangle2D, um die textur anzupassen mit einer x, y koordinate, allerdings scheiterts da an der korrekten berechnung. Daher zunächst die frage geht das überhaupt, wenn ja wie berechnet man dann die korrekten koordinaten? 

Wäre für Hilfe, Ideen dankbar.

Hier der relevante Code:

[CODE lang="java" title="texturen auf die seiten zeichnen"]public void renderIsoImagedBlockTile(Graphics2D g2, AffineTransform transform,BufferedImage[] image) {

    TexturePaint tpRIGHT_SIDE_FRONT = new TexturePaint(image[0],new Rectangle2D.Double(0,0,tile_width,tile_height));

    GeneralPath right_side_front_path = new GeneralPath();

    right_side_front_path.moveTo(x,y);
    right_side_front_path.lineTo(x+1,y+1);
    right_side_front_path.lineTo(x+1,y);
    right_side_front_path.lineTo(x,y-1);
    right_side_front_path.closePath();

    Shape transformedShape_right_side_front_path = transform.createTransformedShape(right_side_front_path);
    g2.setPaint(tpRIGHT_SIDE_FRONT);
    g2.fill(transformedShape_right_side_front_path);
}
        [/CODE]

Gruß Eichelhäer


----------



## Eichelhäer (29. Apr 2021)

Hallo nochmal, mittlerweile habe ich folgende Methode:

[CODE lang="java" title="Render a single tile"]public void renderIsoImagedTile(Graphics2D g2,AffineTransform transform, BufferedImage image) {
    Shape transformedShape = transform.createTransformedShape(new Rectangle2D.Double(x,y,1,1));
    TexturePaint tp = new TexturePaint(image,new Rectangle2D.Double(x,y,tile_width,tile_height));
    g2.setPaint(tp);
    g2.fill(transformedShape);
}[/CODE]

Ok, nehmen wir eine Kachel (ohne Textur), diese wird um 45 grad gedreht und angezeigt. Wenn ich darauf jetzt eine Textur zeichnen möchte geht das auch, allerdings ist diese textur immer fix und wird stets als orthogonales rechteck innerhalb der "Shape" angezeigt. Ich versuche nun zu erreichen, eine Textur auf eine Kachel zu zeichnen die ihreseits wieder um 45 grad gedreht ist. Ich erhalte immer das ergebnis einer starren ungedrehten textur. Ich habe nun naheliegenderweise versucht das bild seinerseits zu drehen und texture paint zu übergeben, allerdings mit dem selben ergebnis. Weiss da jemand rat?


----------



## mihe7 (1. Mai 2021)

Funktioniert es evtl. wenn Du die Transformation auf einen per g2.create() erzeugten Context anwendest?


----------



## Eichelhäer (5. Mai 2021)

Hab ne andere Lösung gefunden. Mich hatte texture paint nur interessiert, weil die darstellung von texturen in einem pseudo 3d raum scheinbar korrekt sind. Allerdings weiss ich das nicht sicher. Danke trotzdem für die antwort.


----------

