//
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;
}
}