2 * Sixth 3D engine. Author: Svjatoslav Agejenko.
3 * This project is released under Creative Commons Zero (CC0) license.
8 package eu.svjatoslav.sixth.e3d.renderer.raster;
10 import eu.svjatoslav.sixth.e3d.geometry.Point3D;
11 import eu.svjatoslav.sixth.e3d.gui.Avatar;
12 import eu.svjatoslav.sixth.e3d.gui.RenderingContext;
13 import eu.svjatoslav.sixth.e3d.gui.ViewPanel;
14 import eu.svjatoslav.sixth.e3d.math.Transform;
15 import eu.svjatoslav.sixth.e3d.math.TransformPipe;
16 import eu.svjatoslav.sixth.e3d.renderer.raster.shapes.AbstractShape;
18 import java.util.ArrayList;
19 import java.util.Collection;
20 import java.util.List;
22 public class ShapeCollection {
24 private final RenderAggregator aggregator = new RenderAggregator();
25 private final TransformPipe transformPipe = new TransformPipe();
26 private final List<AbstractShape> shapes = new ArrayList<>();
28 public synchronized void addShape(final AbstractShape shape) {
32 public Collection<AbstractShape> getShapes() {
40 public synchronized void paint(final ViewPanel viewPanel,
41 final RenderingContext renderingContext) {
43 renderingContext.frameNumber++;
46 transformPipe.clear();
48 // translate scene according to camera current location
49 final Avatar avatar = viewPanel.getAvatar();
51 // rotate scene according to avatar looking direction
52 transformPipe.addTransform(new Transform(new Point3D(), avatar
53 .getAngleXZ(), avatar.getAngleYZ()));
55 // translate scene according to avatar location in the world
56 final Point3D translation = new Point3D(-avatar.getLocation().x,
57 -avatar.getLocation().y, -avatar.getLocation().z);
59 transformPipe.addTransform(new Transform(translation, 0, 0));
61 for (final AbstractShape shape : shapes)
62 shape.transform(transformPipe, aggregator, renderingContext);
64 aggregator.paint(renderingContext);