Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package cviceni3;
- import javax.swing.JButton;
- import javax.swing.JFrame;
- import javax.swing.JPanel;
- import java.awt.BorderLayout;
- import java.awt.Color;
- import java.awt.Component;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.awt.event.KeyAdapter;
- import java.awt.event.KeyEvent;
- import java.awt.event.MouseEvent;
- import java.awt.event.MouseAdapter;
- import rasterOps.*;
- import renderOps.Axes;
- import renderOps.Cube;
- import renderOps.Curve;
- import renderOps.Solid;
- import renderOps.WireframeRenderer;
- import transforms.Camera;
- import transforms.Mat4;
- import transforms.Mat4Identity;
- import transforms.Mat4OrthoRH;
- import transforms.Mat4PerspRH;
- import transforms.Mat4RotX;
- import transforms.Mat4RotXYZ;
- import transforms.Mat4RotY;
- import transforms.Mat4RotZ;
- import transforms.Mat4Scale;
- import transforms.Mat4Transl;
- import transforms.Mat4ViewRH;
- import transforms.Point3D;
- import transforms.Vec3D;
- public class Canvas extends JFrame {
- protected JPanel toolbar = new JPanel();
- protected RasterImage img;
- protected LineRasterizer lineRasterizer;
- protected WireframeRenderer wiren;
- protected Solid cube = new Cube();
- protected Solid curve = new Curve(
- new Point3D(10, 10, 10),
- new Point3D(10, 0, 0),
- new Point3D(0, 10, 10),
- new Point3D(0, 4, 10));
- protected Solid axes = new Axes();
- protected Camera cam = new Camera();
- private double posunX=0;
- private double posunY=0;
- private double posunZ=0;
- private double rotX=0;
- private double rotY=0;
- private double rotZ=0;
- private double scaY = 1;
- private double scaX = 1;
- private double scaZ = 1;
- protected int startX, startY;
- protected int pohled = 2;
- protected Mat4 view, proj;
- public void setView(Mat4 view) {
- this.view = view;
- }
- protected class MouseHandler extends MouseAdapter {
- @Override
- public void mousePressed(MouseEvent ev) {
- startX = ev.getX();
- startY = ev.getY();
- frame();
- }
- @Override
- public void mouseDragged(MouseEvent ev) {
- cam.addAzimuth((Math.PI / 1000) * (startX - ev.getX()));
- cam.addZenith((Math.PI / 1000) * (startY - ev.getY()));
- startX = ev.getX();
- startY = ev.getY();
- frame();
- }
- }
- protected void setup(int width, int height) {
- setVisible(true);
- setSize(width, height);
- setTitle("grafika");
- setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- MouseHandler mouseHandler = new MouseHandler();
- addMouseListener(mouseHandler);
- addMouseMotionListener(mouseHandler);
- addKeyListener(new KeyAdapter() {
- @Override
- public void keyPressed(KeyEvent e) {
- switch (e.getKeyCode()) {
- case KeyEvent.VK_W : cam.forward(1);
- break;
- case KeyEvent.VK_S : cam.backward(1);
- break;
- case KeyEvent.VK_D : cam.right(1);
- break;
- case KeyEvent.VK_A : cam.left(1);
- break;
- case KeyEvent.VK_O : pohled = 1;
- break;
- case KeyEvent.VK_P : pohled = 2;
- break;
- case KeyEvent.VK_RIGHT : posunX += 1;
- break;
- case KeyEvent.VK_LEFT : posunY += 1;
- break;
- case KeyEvent.VK_UP : posunZ += 1;
- break;
- case KeyEvent.VK_X : rotX += 1;
- break;
- case KeyEvent.VK_Y : rotY += 1;
- break;
- case KeyEvent.VK_C : rotZ += 1;
- break;
- case KeyEvent.VK_B : scaX += 0.1;
- break;
- case KeyEvent.VK_N : scaY += 0.1;
- break;
- case KeyEvent.VK_M : scaZ += 0.1;
- break;
- }
- frame();
- }
- });
- img = new RasterImageBuffered(width, height);
- img.clear(0xff000000);
- lineRasterizer = new LineRasterizerDDA(img);
- wiren = new WireframeRenderer(lineRasterizer);
- cam.setPosition(new Vec3D(20, 20, 15));
- cam.setAzimuth(Math.toRadians(225));
- cam.setZenith(Math.toRadians(-35));
- }
- protected void frameAxes() {
- img.clear(0xff000000);
- drawA();
- img.paint(getGraphics());
- }
- protected void frame() {
- img.clear(0xff000000);
- for (int i = 0; i < 10; i++) {
- switch (pohled) {
- case 1:
- wiren.setMat(cam.getViewMatrix().mul(new Mat4OrthoRH(30, 30.0 * img.getHeight() / img.getWidth(), 1, 100)).mul(new Mat4RotXYZ(rotX, rotY, rotZ).mul(new Mat4Scale(scaX, scaY, scaZ).mul(new Mat4Transl(posunX, posunY, posunZ))))); //zad�v�me ���ku, v��ku, ... objemu
- break;
- case 2:
- wiren.setMat(cam.getViewMatrix().mul(new Mat4PerspRH(Math.PI / 3, (double) img.getHeight() / img.getWidth(), 1, 100)).mul(new Mat4RotXYZ(rotX, rotY, rotZ).mul(new Mat4Scale(scaX, scaY, scaZ).mul(new Mat4Transl(posunX, posunY, posunZ))) )); //dopo��t�v�me ��rku z v��ky, v��ka/���ce, aby se krychle zd�la krychl�
- break;
- }
- drawS();
- drawA();
- drawC();
- }
- drawS();
- drawA();
- drawC();
- img.paint(getGraphics());
- }
- public void posunX() {
- wiren.setMat(wiren.getMat().mul(new Mat4Transl(5, 0, 0)));
- }
- public void posunVlevo() {
- wiren.setMat(wiren.getMat().mul(new Mat4Transl(-5, 0, 0)));
- }
- private void drawA() {
- wiren.setVertices(axes.getVertices());
- wiren.setIndices(axes.getIndices());
- wiren.drawAxes(0, axes.getIndices().size(), 0xffffffff);
- }
- public void drawS() {
- wiren.setVertices(cube.getVertices());
- wiren.setIndices(cube.getIndices());
- wiren.drawCube(0, cube.getIndices().size(), 0xffffff00);
- }
- private void drawC(){
- wiren.setIndices(curve.getIndices());
- wiren.setVertices(curve.getVertices());
- wiren.drawCurve(0, curve.getIndices().size(), 0xffffffff);
- }
- public static void main(String[] args) {
- Canvas canvas = new Canvas();
- canvas.setup(800, 600);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement