2017-08-29 1 views
0

ich bereits eine lightmap und Beleuchtung Algorithmus haben, der funktionsfähig ist: tiles w/ lightmap2D Tile basierte glatte Beleuchtung

Ich bin nicht OpenGl mit, ich weiß nicht raycasted Schatten brauchen, ich will nur die lightmap in einem Gradienten zwischen der mischen Vertices der Lightmap, so dass es glatt statt blockig ist. Eine Möglichkeit, wie ich das gesehen habe, war wie folgt: zeichne ein Bild für jede Kachel, die die Lichtkartendaten enthält, um ein Pixel, dann skaliere es mit der Größe der Kacheln und der Interpolation. Allerdings verstehe ich nicht, wie dies zu tun ist und lightmapimage.getScaledInstance(w,h,Image.SCALE_SMOOTH) einfach den gleichen Effekt wie im Bild oben nur unglaublich langsam erzeugt. Wie kann ich die Beleuchtung ressourceneffizient glätten?

Antwort

0

Ich fand es heraus. Für alle, die sich für 2D-Glättung auf Kachelbasis interessieren, hier ist meine Lösung: Nach dem Zeichnen der Lichtkarte zu einem kleinen Bild, bei dem jedes Pixel eine Kachel darstellt, verwenden Sie eine AffineTransformOp des Typs bilinear. (Die Kachelgröße ist 10x10)

BufferedImage after = new BufferedImage(lightmap.getWidth()*10, lightmap.getHeight()*10, BufferedImage.TYPE_INT_ARGB); 
AffineTransform at = new AffineTransform(); 
at.scale(10, 10); 
AffineTransformOp scaleOp = new AffineTransformOp(at, AffineTransformOp.TYPE_BILINEAR); 
after = scaleOp.filter(lightmap, after); 
g.drawImage(after,0,0,null); 
+0

Wenn jemand eine effizientere Lösung hat, wäre ich mehr als interessiert. –