2016-05-26 3 views
0

Ich mache ein Skyline-Spiel als ein Nebenprojekt zum Spaß, und ich hatte Probleme, wenn ich die Wände der Gebäude texturieren würde, ich zeichne gerade ein Polygon zu diesem Bereich, aber ich möchte wissen, ob dort es so zu strukturieren ist eine Art und Weise, dass eine Textur wie folgt aus:Ist es möglich, eine Textur zu Quads ähnlich OpenGL mit nur Grafiken?

Square

wie folgt wiedergegeben werden:

Square mapped to parallelogram

Hier ein Bild des Spiels ist es, und die Teile ich möchte zu texturieren sind die grauen Wände der Gebäude.

Gameplay image

Ich weiß, ich kann dies tun, indem ein separates Rendering-System zu schaffen, das ihm Pixel für Pixel zieht, aber ich versuche, das zu vermeiden.

Meine spezifische Frage ist, ob es Methoden in Java Graphics oder etwas ähnliches gibt, die dies erreichen können.

+2

Vielleicht [Affine] (https://docs.oracle.com/javase verwenden /8/docs/api/java/awt/geom/AffineTransform.html) ist was du brauchst? – msandiford

+0

@msandiford, das vielversprechend aussieht, aber ich glaube nicht, dass es Texturierungsfähigkeiten hat. – Kore

+0

Was Sie mit der Abbildung beschreiben, ist mit AffineTransform machbar (es unterstützt Texturierung), aber der Screenshot zeigt perspektivische Projektion und wird nicht von affiner Transformation unterstützt. – msell

Antwort

1

Wenn Sie eine Scherumwandlung durchführen möchten, ist AffineTransformation Ihre Lösung.

AffineTransform at; 

double shx, shy; 
at.shear(shx, shy); 

Verwendung der AffineTransformation wenn Bild Unentschieden - leider ist es nicht so offensichtlich, dass man Graphics2D zu diesem Zweck

@Override 
public void paintComponent(Graphics g){ 
    Graphics2D g2d = (Graphics2D)g; 
    BufferedImage img = ...; 
    AffineTransform at = ...; 
    g2d.drawImage(img, at, null);//null-param is the ImageObserver 
    .... 
}