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;
- private double posunY;
- private double posunZ;
- private double rotX;
- private double rotY;
- private double rotZ;
- 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 Mat4 prepareMat() {
- // (rotace.mul(scale.mul(translace)).mul(view.mul(projekce))
- wiren.setMat(new Mat4RotXYZ(rotX, rotY, rotZ).mul(new Mat4Scale(scaX, scaY, scaZ).mul(new Mat4Transl(posunX, posunY, posunZ))) );
- setView(cam.getViewMatrix()); //.mul(view.mul(proj))
- return null;
- }
- 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; //v protism�ru by m�sto + bylo -
- break;
- case KeyEvent.VK_Y : rotY += 1;
- break;
- case KeyEvent.VK_C : rotZ += 1;
- break;
- case KeyEvent.VK_B : scaX += 0.1; //z 1, kter� je default
- break;
- case KeyEvent.VK_N : scaY += 0.1;
- break;
- case KeyEvent.VK_M : scaZ += 0.1;
- break;
- }
- prepareMat();
- 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)); //5* Math.PI / 4);
- cam.setZenith(Math.toRadians(-35)); //nebo vypo��tat jako arcustangens
- }
- protected void frameAxes() {
- img.clear(0xff000000);
- drawA();
- img.paint(getGraphics());
- }
- protected void frame() { //star� se o vykreslen� toho jednoho sn�mku
- img.clear(0xff000000);
- // wiren.setMat(wiren.getMat().mul(new Mat4Transl(posunX, posunY, posunZ)));
- for (int i = 0; i < 10; i++) {
- switch (pohled) {
- //new Mat4Transl(10, 0, 0).mul(new Mat4RotZ(i * 2 * Math.PI / 8) ).mul(
- //new Mat4ViewRH(new Vec3D(20, 20, 15), new Vec3D(-20, -20, -15), new Vec3D(0, 0, 1))
- // ---------------- PUVODNI VERZE -----------------
- /*
- case 1:
- wiren.setMat(cam.getViewMatrix().mul(new Mat4OrthoRH(30, 30.0 * img.getHeight() / img.getWidth(), 1, 100))); //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))); //dopo��t�v�me ��rku z v��ky, v��ka/���ce, aby se krychle zd�la krychl�
- break;
- }*/
- //--------DOPLNENO O KOD Z METODY prepare MAT jako nasobeni (vubec netusim, co to doopravdy dela)
- // (new Mat4RotXYZ(rotX, rotY, rotZ).mul(new Mat4Scale(scaX, scaY, scaZ).mul(new Mat4Transl(posunX, posunY, posunZ))) )
- 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