/*
- * Sixth 3D engine. Author: Svjatoslav Agejenko.
+ * Sixth 3D engine. Author: Svjatoslav Agejenko.
* This project is released under Creative Commons Zero (CC0) license.
*/
package eu.svjatoslav.sixth.e3d.math;
import eu.svjatoslav.sixth.e3d.gui.RenderingContext;
/**
- * It is used to store coordinates of vertices of 3D objects.
- * It is also used to store coordinates of points in 3D space.
+ * Vertex is a point where two or more lines, line segments, or rays come together.
+ * In other words, it's a corner of a polygon, polyhedron, or other geometric shape.
+ * For example, a triangle has three vertices, a square has four, and a cube has eight.
*/
public class Vertex {
/**
* Vertex coordinate relative to the viewer after transformation.
+ * Visible vertices have positive z coordinate.
+ * Viewer is located at (0, 0, 0).
+ * No perspective correction is applied.
*/
public Point3D transformedCoordinate;
/**
- * Vertex coordinate on screen after transformation.
+ * Vertex coordinate in pixels relative to the top left corner of the screen after transformation
+ * and perspective correction.
*/
public Point2D onScreenCoordinate;
+
+ /**
+ * Coordinate within texture.
+ */
+ public Point2D textureCoordinate;
+
+
+ /**
+ * The frame number when this vertex was last transformed.
+ */
private int lastTransformedFrame;
public Vertex() {
- coordinate = new Point3D();
- transformedCoordinate = new Point3D();
- onScreenCoordinate = new Point2D();
+ this(new Point3D());
}
public Vertex(final Point3D location) {
+ this(location, null);
+ }
+
+ public Vertex(final Point3D location, Point2D textureCoordinate) {
coordinate = location;
transformedCoordinate = new Point3D();
onScreenCoordinate = new Point2D();
+ this.textureCoordinate = textureCoordinate;
}
+
/**
- * Transforms the coordinate.
+ * Transforms vertex coordinate to calculate its location relative to the viewer.
+ * It also calculates its location on the screen.
*
- * @param transforms The transforms pipeline.
- * @param renderContext The rendering context.
+ * @param transforms Transforms pipeline.
+ * @param renderContext Rendering context.
*/
- public void transform(final TransformsPipeline transforms,
- final RenderingContext renderContext) {
+ public void calculateLocationRelativeToViewer(final TransformsStack transforms,
+ final RenderingContext renderContext) {
if (lastTransformedFrame == renderContext.frameNumber)
return;