Advertisement
Guest User

Untitled

a guest
Dec 19th, 2014
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.33 KB | None | 0 0
  1. package cviceni3;
  2.  
  3. import javax.swing.JButton;
  4. import javax.swing.JFrame;
  5. import javax.swing.JPanel;
  6.  
  7. import java.awt.BorderLayout;
  8. import java.awt.Color;
  9. import java.awt.Component;
  10. import java.awt.event.ActionEvent;
  11. import java.awt.event.ActionListener;
  12. import java.awt.event.KeyAdapter;
  13. import java.awt.event.KeyEvent;
  14. import java.awt.event.MouseEvent;
  15. import java.awt.event.MouseAdapter;
  16.  
  17. import rasterOps.*;
  18. import renderOps.Axes;
  19. import renderOps.Cube;
  20. import renderOps.Curve;
  21. import renderOps.Solid;
  22. import renderOps.WireframeRenderer;
  23. import transforms.Camera;
  24. import transforms.Mat4;
  25. import transforms.Mat4Identity;
  26. import transforms.Mat4OrthoRH;
  27. import transforms.Mat4PerspRH;
  28. import transforms.Mat4RotX;
  29. import transforms.Mat4RotXYZ;
  30. import transforms.Mat4RotY;
  31. import transforms.Mat4RotZ;
  32. import transforms.Mat4Scale;
  33. import transforms.Mat4Transl;
  34. import transforms.Mat4ViewRH;
  35. import transforms.Point3D;
  36. import transforms.Vec3D;
  37.  
  38. public class Canvas extends JFrame {
  39.    
  40.     protected JPanel toolbar = new JPanel();
  41.     protected RasterImage img;
  42.     protected LineRasterizer lineRasterizer;
  43.     protected WireframeRenderer wiren;
  44.     protected Solid cube = new Cube();
  45.     protected Solid curve = new Curve(
  46.             new Point3D(10, 10, 10),
  47.             new Point3D(10, 0, 0),
  48.             new Point3D(0, 10, 10),
  49.             new Point3D(0, 4, 10));
  50.     protected Solid axes = new Axes();
  51.     protected Camera cam = new Camera();
  52.    
  53.     private double posunX;
  54.     private double posunY;
  55.     private double posunZ;
  56.     private double rotX;
  57.     private double rotY;
  58.     private double rotZ;
  59.     private double scaY = 1;
  60.     private double scaX = 1;
  61.     private double scaZ = 1;
  62.    
  63.     protected int startX, startY;
  64.     protected int pohled = 2;
  65.     protected Mat4 view, proj;
  66.    
  67.     public void setView(Mat4 view) {
  68.         this.view = view;
  69.     }
  70.  
  71.     protected class MouseHandler extends MouseAdapter {
  72.        
  73.         @Override
  74.         public void mousePressed(MouseEvent ev) {
  75.             startX = ev.getX();
  76.             startY = ev.getY();
  77.             frame();
  78.         }
  79.        
  80.         @Override
  81.         public void mouseDragged(MouseEvent ev) {
  82.             cam.addAzimuth((Math.PI / 1000) * (startX - ev.getX()));
  83.             cam.addZenith((Math.PI / 1000) * (startY - ev.getY()));
  84.            
  85.             startX = ev.getX();
  86.             startY = ev.getY();
  87.             frame();
  88.         }
  89.     }
  90.    
  91.    
  92.     protected Mat4 prepareMat() {
  93.         // (rotace.mul(scale.mul(translace)).mul(view.mul(projekce))
  94.         wiren.setMat(new Mat4RotXYZ(rotX, rotY, rotZ).mul(new Mat4Scale(scaX, scaY, scaZ).mul(new Mat4Transl(posunX, posunY, posunZ))) );
  95.         setView(cam.getViewMatrix());       //.mul(view.mul(proj))
  96.         return null;
  97.     }
  98.    
  99.     protected void setup(int width, int height) {
  100.         setVisible(true);
  101.         setSize(width, height);
  102.         setTitle("grafika");
  103.         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  104.        
  105.         MouseHandler mouseHandler = new MouseHandler();
  106.         addMouseListener(mouseHandler);
  107.         addMouseMotionListener(mouseHandler);
  108.         addKeyListener(new KeyAdapter() {
  109.        
  110.             @Override
  111.             public void keyPressed(KeyEvent e) {
  112.                 switch (e.getKeyCode()) {
  113.                 case KeyEvent.VK_W : cam.forward(1);
  114.                     break;
  115.                 case KeyEvent.VK_S : cam.backward(1);
  116.                     break;
  117.                 case KeyEvent.VK_D : cam.right(1);
  118.                     break;
  119.                 case KeyEvent.VK_A : cam.left(1);
  120.                     break;
  121.                    
  122.                 case KeyEvent.VK_O : pohled = 1;
  123.                     break;
  124.                 case KeyEvent.VK_P : pohled = 2;
  125.                     break;
  126.                    
  127.                 case KeyEvent.VK_RIGHT : posunX += 1;
  128.                     break;
  129.                 case KeyEvent.VK_LEFT : posunY += 1;
  130.                     break;
  131.                 case KeyEvent.VK_UP : posunZ += 1;
  132.                     break;
  133.                    
  134.                 case KeyEvent.VK_X : rotX += 1; //v protism�ru by m�sto + bylo -
  135.                     break;
  136.                 case KeyEvent.VK_Y : rotY += 1;
  137.                     break;
  138.                 case KeyEvent.VK_C : rotZ += 1;
  139.                     break;
  140.                    
  141.                 case KeyEvent.VK_B : scaX += 0.1; //z 1, kter� je default
  142.                     break;
  143.                 case KeyEvent.VK_N : scaY += 0.1;
  144.                     break;
  145.                 case KeyEvent.VK_M : scaZ += 0.1;
  146.                     break;
  147.                 }
  148.                 prepareMat();
  149.                                 frame();
  150.             }
  151.         });
  152.        
  153.         img = new RasterImageBuffered(width, height);
  154.         img.clear(0xff000000);
  155.         lineRasterizer = new LineRasterizerDDA(img);
  156.         wiren = new WireframeRenderer(lineRasterizer);
  157.        
  158.         cam.setPosition(new Vec3D(20, 20, 15));
  159.         cam.setAzimuth(Math.toRadians(225)); //5* Math.PI / 4);
  160.         cam.setZenith(Math.toRadians(-35)); //nebo vypo��tat jako arcustangens
  161.  
  162.     }
  163.    
  164.     protected void frameAxes() {
  165.         img.clear(0xff000000);
  166.         drawA();
  167.         img.paint(getGraphics());
  168.     }
  169.    
  170.     protected void frame() { //star� se o vykreslen� toho jednoho sn�mku
  171.         img.clear(0xff000000);
  172.        
  173.     //  wiren.setMat(wiren.getMat().mul(new Mat4Transl(posunX, posunY, posunZ)));
  174.        
  175.         for (int i = 0; i < 10; i++) {
  176.             switch (pohled) {
  177.             //new Mat4Transl(10, 0, 0).mul(new Mat4RotZ(i * 2 * Math.PI / 8) ).mul(
  178.                 //new Mat4ViewRH(new Vec3D(20, 20, 15), new Vec3D(-20, -20, -15), new Vec3D(0, 0, 1))
  179.                            
  180.                             // ---------------- PUVODNI VERZE -----------------
  181.                            /*
  182.             case 1:
  183.                 wiren.setMat(cam.getViewMatrix().mul(new Mat4OrthoRH(30, 30.0 * img.getHeight() / img.getWidth(), 1, 100))); //zad�v�me ���ku, v��ku, ... objemu
  184.                 break;
  185.             case 2:
  186.                 wiren.setMat(cam.getViewMatrix().mul(new Mat4PerspRH(Math.PI / 3, (double) img.getHeight() / img.getWidth(), 1, 100))); //dopo��t�v�me ��rku z v��ky, v��ka/���ce, aby se krychle zd�la krychl�
  187.                 break;
  188.             }*/                        
  189.                        
  190.                             //--------DOPLNENO O KOD Z METODY prepare MAT jako nasobeni (vubec netusim, co to doopravdy dela)
  191.                             // (new Mat4RotXYZ(rotX, rotY, rotZ).mul(new Mat4Scale(scaX, scaY, scaZ).mul(new Mat4Transl(posunX, posunY, posunZ))) )                            
  192.                         case 1:
  193.                 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
  194.                 break;
  195.             case 2:
  196.                 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�
  197.                 break;
  198.             }  
  199.                        
  200.                        
  201.             drawS();
  202.             drawA();
  203.             drawC();
  204.         }
  205.         drawS();
  206.         drawA();
  207.         drawC();
  208.         img.paint(getGraphics());
  209.     }
  210.    
  211.     public void posunX() {
  212.         wiren.setMat(wiren.getMat().mul(new Mat4Transl(5, 0, 0)));
  213.     }
  214.    
  215.     public void posunVlevo() {
  216.         wiren.setMat(wiren.getMat().mul(new Mat4Transl(-5, 0, 0)));
  217.     }
  218.    
  219.     private void drawA() {
  220.         wiren.setVertices(axes.getVertices());
  221.         wiren.setIndices(axes.getIndices());
  222.         wiren.drawAxes(0, axes.getIndices().size(), 0xffffffff);
  223.     }
  224.    
  225.     public void drawS() {
  226.         wiren.setVertices(cube.getVertices());
  227.         wiren.setIndices(cube.getIndices());
  228.         wiren.drawCube(0, cube.getIndices().size(), 0xffffff00);
  229.     }
  230.    
  231.     private void drawC(){
  232.         wiren.setIndices(curve.getIndices());
  233.         wiren.setVertices(curve.getVertices());
  234.         wiren.drawCurve(0, curve.getIndices().size(), 0xffffffff);
  235.     }
  236.    
  237.     public static void main(String[] args) {
  238.         Canvas canvas = new Canvas();
  239.         canvas.setup(800, 600);
  240.  
  241.     }
  242.  
  243. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement