Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.awt.image.BufferedImage;
- import transforms3D.Mat4;
- import transforms3D.Mat4Identity;
- import transforms3D.Mat4PerspRH;
- import transforms3D.Mat4ViewRH;
- import transforms3D.Point3D;
- import transforms3D.Vec3D;
- public class RendererGPU {
- private Mat4 model;
- private Mat4 view;
- private Mat4 persp; // mohla by byt i Mat4PerspRH, ale diky dedicnosti pouzijeme Mat4 a tim je pak mozne pouzit i jinou transformaci
- private BufferedImage img;
- public RendererGPU(BufferedImage img) {
- Vec3D e = new Vec3D(0, 0, 10);
- Vec3D v = new Vec3D(0, 0, -1);
- Vec3D u = new Vec3D(0, 1, 0);
- this.img = img;
- model = new Mat4Identity();
- view = new Mat4ViewRH(e, v, u);
- float k = img.getWidth() / (float) img.getHeight();
- persp = new Mat4PerspRH(Math.PI/2, k, 0.1, 100);
- // Mat4PerspRH(zorny uhel, pomer sirka/vyska okna, blizke z, vzdalene z);
- // vzdy pri deleni zkousmat definicni obor!!!!!
- // 180°je rybi oko - cely prostor polokoule, ale hodne deformuje objem
- // Math.PI/2 je 90°lze zapsat Math.toRadians();
- }
- public void drawLine(Point3D p1, Point3D p2) {
- Vec3D a;
- Vec3D b;
- p1 = p1.mul(model);
- p2 = p2.mul(model);
- // p1 = p1.mul(model).mul(view); // jednodussi zapis
- p1 = p1.mul(view);
- p2 = p2.mul(view);
- p1 = p1.mul(persp);
- p2 = p2.mul(persp);
- // dehomogenizace:
- a = p1.dehomog();
- b = p2.dehomog();
- a = a.mul(new Vec3D(1, -1, 1)); // oteceni y - uz neni nahoru, ale dolu
- a = a.add(new Vec3D(1, 1, 0));
- a.x = a.x * (img.getWidth() - 1);
- a.y = a.y * (img.getHeight() - 1);
- img.getGraphics().drawLine(0, 0, img.getWidth()-1, img.getHeight()-1);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment