2 * Sixth 3D engine demos. Copyright ©2012-2018, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of version 3 of the GNU Lesser General Public License
6 * or later as published by the Free Software Foundation.
9 package eu.svjatoslav.sixth.e3d.examples;
11 import eu.svjatoslav.sixth.e3d.geometry.Point3D;
12 import eu.svjatoslav.sixth.e3d.gui.ViewFrame;
13 import eu.svjatoslav.sixth.e3d.gui.ViewPanel;
14 import eu.svjatoslav.sixth.e3d.renderer.raster.Color;
15 import eu.svjatoslav.sixth.e3d.renderer.raster.ShapeCollection;
16 import eu.svjatoslav.sixth.e3d.renderer.raster.shapes.basic.line.LineAppearance;
17 import eu.svjatoslav.sixth.e3d.renderer.raster.shapes.basic.solidpolygon.SolidPolygon;
18 import eu.svjatoslav.sixth.e3d.renderer.raster.shapes.composite.wireframe.WireframeSphere;
20 public class SphereDemo {
22 private static final double WAVE_FREQUENCY = 50d;
23 private static final double WAVE_AMPLITUDE = 50d;
24 private static final Color SQUARE_PLATE_COLOR = new Color("88F7");
26 private static void makeSquarePlate(final ShapeCollection shapeCollection,
27 final double y, final double x, final double z) {
28 final Point3D p1 = new Point3D(x, y, z);
29 final Point3D p2 = new Point3D(x + 20, y, z);
30 final Point3D p3 = new Point3D(x, y, z + 20);
31 final Point3D p4 = new Point3D(x + 20, y, z + 20);
32 final SolidPolygon polygon1 = new SolidPolygon(p1, p2, p3, SQUARE_PLATE_COLOR);
33 final SolidPolygon polygon2 = new SolidPolygon(p4, p2, p3, SQUARE_PLATE_COLOR);
34 shapeCollection.addShape(polygon1);
35 shapeCollection.addShape(polygon2);
39 * @param surfaceElevation surface total elevation
41 private static void makeWobblySurface(final ShapeCollection shapeCollection,
42 final double surfaceElevation) {
43 for (double x = -500; x < 500; x += 20)
44 for (double z = -500; z < 500; z += 20) {
46 // use Pythagorean theorem to compute distance from the center
47 final double distanceFromCenter = Math.sqrt((x * x) + (z * z));
49 double plateElevation = Math.sin(distanceFromCenter / WAVE_FREQUENCY) * WAVE_AMPLITUDE;
51 makeSquarePlate(shapeCollection, plateElevation + surfaceElevation, x,
56 public static void main(final String[] args) {
58 final ViewFrame viewFrame = new ViewFrame();
59 final ViewPanel viewPanel = viewFrame.getViewPanel();
61 final ShapeCollection geometryCollection = viewPanel
62 .getRootShapeCollection();
64 final LineAppearance appearance = new LineAppearance(4, new Color(255,
68 geometryCollection.addShape(new WireframeSphere(new Point3D(0, 0, 0),
72 makeWobblySurface(geometryCollection, 200);
73 makeWobblySurface(geometryCollection, -200);
75 viewPanel.getAvatar().setLocation(new Point3D(0, 0, -340));