import javax.swing.*;
import java.awt.*;
import java.io.File;
import java.awt.image.BufferedImage;
public class View extends JFrame {
/** Underlying array for framebuffer */
protected int[] screen;
protected BufferedImage framebuffer;
private final int WIDTH = 512;
private final int HEIGHT = 512;
private Mesh mesh;
float cameraZ = 5;
public View(String filename) {
super("3D");
mesh = new Mesh(filename);
framebuffer = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
screen = new int[WIDTH * HEIGHT];
renderScene();
setSize(WIDTH, HEIGHT);
setResizable(false);
int fps = 30;
new java.util.Timer().schedule(new java.util.TimerTask() {
public void run() {
oneFrame();
}}, 0, (int)(1000 / fps));
}
/** Process one frame of animation */
protected void oneFrame() {
renderScene();
mesh.rotate((float)Math.toRadians(7));
repaint();
}
/** Called from oneFrame */
synchronized private void renderScene() {
Graphics3D renderer = new Graphics3D(framebuffer, cameraZ);
renderer.setColor(Color.white);
renderer.clear();
mesh.render(renderer);
}
synchronized public void paint(Graphics _g) {
Graphics2D g = (Graphics2D)_g;
g.drawImage(framebuffer,
0, 0, getWidth(), getHeight(),
0, 0, framebuffer.getWidth(), framebuffer.getHeight(),
null);
}
static public void main(String[] arg) {
String filename = "cube.xml";
if (arg.length > 0) {
filename = arg[0];
}
new View(filename).setVisible(true);
}
}