/*
- * Sixth 3D engine. Copyright ©2012-2017, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 3 of the GNU Lesser General Public License
- * or later as published by the Free Software Foundation.
- *
+ * Sixth 3D engine. Author: Svjatoslav Agejenko.
+ * This project is released under Creative Commons Zero (CC0) license.
*/
-
package eu.svjatoslav.sixth.e3d.renderer.raster.shapes;
-import eu.svjatoslav.sixth.e3d.geometry.GeometryCoordinate;
-import eu.svjatoslav.sixth.e3d.geometry.Point3D;
-import eu.svjatoslav.sixth.e3d.geometry.TransformPipe;
import eu.svjatoslav.sixth.e3d.gui.RenderingContext;
+import eu.svjatoslav.sixth.e3d.math.TransformsStack;
+import eu.svjatoslav.sixth.e3d.math.Vertex;
import eu.svjatoslav.sixth.e3d.renderer.raster.RenderAggregator;
import java.util.concurrent.atomic.AtomicInteger;
public abstract class AbstractCoordinateShape extends AbstractShape {
- public static final AtomicInteger lastShapeId = new AtomicInteger();
+ private static final AtomicInteger lastShapeId = new AtomicInteger();
public final int shapeId;
+ public final Vertex[] coordinates;
public double onScreenZ;
- public GeometryCoordinate[] coordinates;
public AbstractCoordinateShape(final int pointsCount) {
- coordinates = new GeometryCoordinate[pointsCount];
+ coordinates = new Vertex[pointsCount];
for (int i = 0; i < pointsCount; i++)
- coordinates[i] = new GeometryCoordinate();
+ coordinates[i] = new Vertex();
shapeId = lastShapeId.getAndIncrement();
}
- public AbstractCoordinateShape(final Point3D... locationPoints) {
- coordinates = new GeometryCoordinate[locationPoints.length];
-
- for (int i = 0; i < locationPoints.length; i++)
- coordinates[i] = new GeometryCoordinate(locationPoints[i]);
+ public AbstractCoordinateShape(final Vertex... vertexes) {
+ coordinates = vertexes;
shapeId = lastShapeId.getAndIncrement();
}
public abstract void paint(RenderingContext renderBuffer);
@Override
- public void transform(final TransformPipe transforms,
+ public void transform(final TransformsStack transforms,
final RenderAggregator aggregator,
final RenderingContext renderingContext) {
double accumulatedZ = 0;
boolean paint = true;
- for (final GeometryCoordinate geometryPoint : coordinates) {
- geometryPoint.transform(transforms, renderingContext);
+ for (final Vertex geometryPoint : coordinates) {
+ geometryPoint.calculateLocationRelativeToViewer(transforms, renderingContext);
accumulatedZ += geometryPoint.transformedCoordinate.z;
- if (!geometryPoint.transformedCoordinate.withinDrawingLimits())
+ if (!geometryPoint.transformedCoordinate.isVisible())
paint = false;
}