//
package render; import java.awt.*; import java.awt.image.*; /** * @author Du Nguyen * */ public class InteractiveBuffer extends InteractiveMesh { Renderable rend; BufferedImage image; Graphics graphics; /** * @param m * @param n * @param applet */ public InteractiveBuffer(int m, int n, int w, int h, Renderable ap) { rend = ap; W = w; H = h; image = new BufferedImage(W,H,BufferedImage.TYPE_INT_RGB); graphics = image.getGraphics(); rend.render(graphics); pixels = new int[W*H]; getPixels(pixels,image); Geometry g = this.add(); texture = new Texture(pixels,W,H,"grid",false); Material material = new Material(); material.setTexture(texture); g.setMaterial(material); g.setDoubleSided(true); g.mesh(m,n); } public void getPixels(int[]pixels, BufferedImage image) { PixelGrabber pixelgrabber = new PixelGrabber(image, 0, 0, W, H, pixels, 0, W); try { pixelgrabber.grabPixels(); } catch (InterruptedException e) { e.printStackTrace(); } damage = false; } public void animate(double time) { if (damage) { rend.render(image.createGraphics()); getPixels(pixels,image); } } public boolean mouseDown(Event evt, double[]xyz,Geometry g) { if (!super.mouseDown(evt,xyz,g)) return false; int[] p = this.getXY(xyz); rend.mouseDown(evt,p[0],p[1]); return true; } public boolean mouseUp(Event evt, double[]xyz) { int[] p = this.getXY(xyz); rend.mouseUp(evt,p[0],p[1]); damage = true; return true; } public boolean mouseDrag(Event evt, double[]xyz) { if (!super.mouseUp(evt,xyz)) return false; int[] p = this.getXY(xyz); rend.mouseDrag(evt,p[0],p[1]); return true; } }