This repository has been archived on 2024-01-12. You can view files and clone it, but cannot push or open issues or pull requests.
jpath/src/main/java/geometry/scene/Scene.java

61 lines
1.9 KiB
Java

package geometry.scene;
import basics.math.algebra.Ray;
import basics.math.algebra.Vector;
import optics.light.Color;
import optics.light.Directional;
import optics.light.LightSource;
import optics.light.Point;
import raytracing.BasicMaterial;
import renderer.mesh.BasicMesh;
import renderer.mesh.Mesh;
import renderer.primitive.Plane;
import renderer.primitive.Sphere;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
public class Scene {
private AccelerationStructure structure;
private List<LightSource> lights;
public Scene(AccelerationStructure structure) {
this.structure = structure;
this.lights = new ArrayList<>();
}
public static Scene generateExampleScene() {
Scene scene = new Scene(new LinearList());
scene.addMesh(new BasicMesh(new BasicMaterial(new Color(0.8, 0.4, 0.2), 1.0, new Color(1,0.4,0.1)), new Sphere(new Vector(2,0,0), 1.0)));
scene.addMesh(new BasicMesh(new BasicMaterial(new Color(0.8, 0.4, 0.2), 0.0, new Color(1,0.4,0.1)), new Sphere(Vector.origin(), 1.0)));
scene.addMesh(new BasicMesh(new BasicMaterial(new Color(1, 1, 1), 0.2, new Color(1.0)), new Plane(new Vector(1, 0, 0), 1.0)));
scene.addMesh(new BasicMesh(new BasicMaterial(new Color(1, 1, 1), 0.0, new Color(1.0)), new Plane(new Vector(0, 1, 0), 1.0)));
scene.addLight(new Point(new Color(0.9, 0, 0), new Vector(8,3,-2)));
scene.addLight(new Point(new Color(0,0.8,0), new Vector(4,3,2)));
//scene.addLight(new Directional(new Color(1), new Vector(1, 1, 0).normalize()));
return scene;
}
public void addLight(LightSource light) {
this.lights.add(light);
}
public void addMesh(Mesh mesh) {
this.structure.addMesh(mesh);
}
public Optional<Hit> intersect(Ray ray) {
return this.structure.intersect(ray);
}
public List<LightSource> getLights() {
return lights;
}
}