2 * Sixth 3D engine. Author: Svjatoslav Agejenko.
3 * This project is released under Creative Commons Zero (CC0) license.
5 package eu.svjatoslav.sixth.e3d.renderer.raster.shapes;
7 import eu.svjatoslav.sixth.e3d.gui.RenderingContext;
8 import eu.svjatoslav.sixth.e3d.math.TransformsStack;
9 import eu.svjatoslav.sixth.e3d.math.Vertex;
10 import eu.svjatoslav.sixth.e3d.renderer.raster.RenderAggregator;
12 import java.util.concurrent.atomic.AtomicInteger;
14 public abstract class AbstractCoordinateShape extends AbstractShape {
16 private static final AtomicInteger lastShapeId = new AtomicInteger();
17 public final int shapeId;
18 public final Vertex[] coordinates;
19 public double onScreenZ;
21 public AbstractCoordinateShape(final int pointsCount) {
22 coordinates = new Vertex[pointsCount];
23 for (int i = 0; i < pointsCount; i++)
24 coordinates[i] = new Vertex();
26 shapeId = lastShapeId.getAndIncrement();
29 public AbstractCoordinateShape(final Vertex... vertexes) {
30 coordinates = vertexes;
32 shapeId = lastShapeId.getAndIncrement();
35 public double getZ() {
39 public abstract void paint(RenderingContext renderBuffer);
42 public void transform(final TransformsStack transforms,
43 final RenderAggregator aggregator,
44 final RenderingContext renderingContext) {
46 double accumulatedZ = 0;
49 for (final Vertex geometryPoint : coordinates) {
50 geometryPoint.calculateLocationRelativeToViewer(transforms, renderingContext);
52 accumulatedZ += geometryPoint.transformedCoordinate.z;
54 if (!geometryPoint.transformedCoordinate.isVisible())
59 onScreenZ = accumulatedZ / coordinates.length;
60 aggregator.queueShapeForRendering(this);