d95717cf384df9e2b446c2dd4af5a090a2547fd1
[sixth-3d.git] / src / main / java / eu / svjatoslav / sixth / e3d / math / GeometryCoordinate.java
1 /*
2  * Sixth 3D engine. Copyright ©2012-2018, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of version 3 of the GNU Lesser General Public License
6  * or later as published by the Free Software Foundation.
7  *
8  */
9
10 package eu.svjatoslav.sixth.e3d.math;
11
12 import eu.svjatoslav.sixth.e3d.geometry.Point2D;
13 import eu.svjatoslav.sixth.e3d.geometry.Point3D;
14 import eu.svjatoslav.sixth.e3d.gui.RenderingContext;
15
16 public class GeometryCoordinate {
17
18     public Point3D coordinate;
19     public Point3D transformedCoordinate;
20     public Point2D onScreenCoordinate;
21
22     private int lastTransformedFrame;
23
24     public GeometryCoordinate() {
25         coordinate = new Point3D();
26         transformedCoordinate = new Point3D();
27         onScreenCoordinate = new Point2D();
28     }
29
30     public GeometryCoordinate(final Point3D location) {
31         coordinate = location;
32         transformedCoordinate = new Point3D();
33         onScreenCoordinate = new Point2D();
34     }
35
36     public void transform(final TransformPipe transforms,
37                           final RenderingContext renderContext) {
38
39         if (lastTransformedFrame == renderContext.frameNumber)
40             return;
41
42         lastTransformedFrame = renderContext.frameNumber;
43
44         transforms.transform(coordinate, transformedCoordinate);
45
46         onScreenCoordinate.x = ((transformedCoordinate.x / transformedCoordinate.z) * renderContext.zoom)
47                 + renderContext.xCenter;
48         onScreenCoordinate.y = ((transformedCoordinate.y / transformedCoordinate.z) * renderContext.zoom)
49                 + renderContext.yCenter;
50     }
51 }