Advertisement
Guest User

Untitled

a guest
Dec 19th, 2014
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.71 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=0;
  54.     private double posunY=0;
  55.     private double posunZ=0;
  56.     private double rotX=0;
  57.     private double rotY=0;
  58.     private double rotZ=0;
  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.     protected void setup(int width, int height) {
  92.         setVisible(true);
  93.         setSize(width, height);
  94.         setTitle("grafika");
  95.         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  96.        
  97.         MouseHandler mouseHandler = new MouseHandler();
  98.         addMouseListener(mouseHandler);
  99.         addMouseMotionListener(mouseHandler);
  100.         addKeyListener(new KeyAdapter() {
  101.        
  102.             @Override
  103.             public void keyPressed(KeyEvent e) {
  104.                 switch (e.getKeyCode()) {
  105.                 case KeyEvent.VK_W : cam.forward(1);
  106.                     break;
  107.                 case KeyEvent.VK_S : cam.backward(1);
  108.                     break;
  109.                 case KeyEvent.VK_D : cam.right(1);
  110.                     break;
  111.                 case KeyEvent.VK_A : cam.left(1);
  112.                     break;
  113.                    
  114.                 case KeyEvent.VK_O : pohled = 1;
  115.                     break;
  116.                 case KeyEvent.VK_P : pohled = 2;
  117.                     break;
  118.                    
  119.                 case KeyEvent.VK_RIGHT : posunX += 1;
  120.                     break;
  121.                 case KeyEvent.VK_LEFT : posunY += 1;
  122.                     break;
  123.                 case KeyEvent.VK_UP : posunZ += 1;
  124.                     break;
  125.                    
  126.                 case KeyEvent.VK_X : rotX += 1;
  127.                     break;
  128.                 case KeyEvent.VK_Y : rotY += 1;
  129.                     break;
  130.                 case KeyEvent.VK_C : rotZ += 1;
  131.                     break;
  132.                    
  133.                 case KeyEvent.VK_B : scaX += 0.1;
  134.                     break;
  135.                 case KeyEvent.VK_N : scaY += 0.1;
  136.                     break;
  137.                 case KeyEvent.VK_M : scaZ += 0.1;
  138.                     break;
  139.                 }
  140.                                 frame();
  141.             }
  142.         });
  143.        
  144.         img = new RasterImageBuffered(width, height);
  145.         img.clear(0xff000000);
  146.         lineRasterizer = new LineRasterizerDDA(img);
  147.         wiren = new WireframeRenderer(lineRasterizer);
  148.        
  149.         cam.setPosition(new Vec3D(20, 20, 15));
  150.         cam.setAzimuth(Math.toRadians(225));
  151.         cam.setZenith(Math.toRadians(-35));
  152.  
  153.     }
  154.    
  155.     protected void frameAxes() {
  156.         img.clear(0xff000000);
  157.         drawA();
  158.         img.paint(getGraphics());
  159.     }
  160.    
  161.     protected void frame() {
  162.         img.clear(0xff000000);
  163.        
  164.         for (int i = 0; i < 10; i++) {
  165.             switch (pohled) {                          
  166.                         case 1:
  167.                 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
  168.                 break;
  169.             case 2:
  170.                 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�
  171.                 break;
  172.             }  
  173.                        
  174.                        
  175.             drawS();
  176.             drawA();
  177.             drawC();
  178.         }
  179.         drawS();
  180.         drawA();
  181.         drawC();
  182.         img.paint(getGraphics());
  183.     }
  184.    
  185.     public void posunX() {
  186.         wiren.setMat(wiren.getMat().mul(new Mat4Transl(5, 0, 0)));
  187.     }
  188.    
  189.     public void posunVlevo() {
  190.         wiren.setMat(wiren.getMat().mul(new Mat4Transl(-5, 0, 0)));
  191.     }
  192.    
  193.     private void drawA() {
  194.         wiren.setVertices(axes.getVertices());
  195.         wiren.setIndices(axes.getIndices());
  196.         wiren.drawAxes(0, axes.getIndices().size(), 0xffffffff);
  197.     }
  198.    
  199.     public void drawS() {
  200.         wiren.setVertices(cube.getVertices());
  201.         wiren.setIndices(cube.getIndices());
  202.         wiren.drawCube(0, cube.getIndices().size(), 0xffffff00);
  203.     }
  204.    
  205.     private void drawC(){
  206.         wiren.setIndices(curve.getIndices());
  207.         wiren.setVertices(curve.getVertices());
  208.         wiren.drawCurve(0, curve.getIndices().size(), 0xffffffff);
  209.     }
  210.    
  211.     public static void main(String[] args) {
  212.         Canvas canvas = new Canvas();
  213.         canvas.setup(800, 600);
  214.  
  215.     }
  216.  
  217. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement