2 * Sixth 3D engine. Author: Svjatoslav Agejenko.
3 * This project is released under Creative Commons Zero (CC0) license.
5 package eu.svjatoslav.sixth.e3d.math;
7 import eu.svjatoslav.sixth.e3d.geometry.Point2D;
8 import eu.svjatoslav.sixth.e3d.geometry.Point3D;
9 import eu.svjatoslav.sixth.e3d.gui.RenderingContext;
12 * A point in 3D space with a transformed and on-screen coordinates.
14 public class GeometryCoordinate {
17 * The original coordinate.
19 public Point3D coordinate;
22 * The transformed coordinate.
24 public Point3D transformedCoordinate;
27 * The on-screen coordinate.
29 public Point2D onScreenCoordinate;
31 private int lastTransformedFrame;
33 public GeometryCoordinate() {
34 coordinate = new Point3D();
35 transformedCoordinate = new Point3D();
36 onScreenCoordinate = new Point2D();
39 public GeometryCoordinate(final Point3D location) {
40 coordinate = location;
41 transformedCoordinate = new Point3D();
42 onScreenCoordinate = new Point2D();
46 * Transforms the coordinate.
50 * @param renderContext
51 * The rendering context.
53 public void transform(final TransformsPipeline transforms,
54 final RenderingContext renderContext) {
56 if (lastTransformedFrame == renderContext.frameNumber)
59 lastTransformedFrame = renderContext.frameNumber;
61 transforms.transform(coordinate, transformedCoordinate);
63 onScreenCoordinate.x = ((transformedCoordinate.x / transformedCoordinate.z) * renderContext.zoom)
64 + renderContext.xCenter;
65 onScreenCoordinate.y = ((transformedCoordinate.y / transformedCoordinate.z) * renderContext.zoom)
66 + renderContext.yCenter;