package xyz.marsavic.gfxlab.graphics3d.scene; import javafx.util.Pair; import xyz.marsavic.functions.interfaces.F1; import xyz.marsavic.geometry.Vector; import xyz.marsavic.gfxlab.Spectrum; import xyz.marsavic.gfxlab.SplineSpectrum; import xyz.marsavic.gfxlab.Vec3; import xyz.marsavic.gfxlab.graphics3d.Light; import xyz.marsavic.gfxlab.graphics3d.Material; import xyz.marsavic.gfxlab.graphics3d.Scene; import xyz.marsavic.gfxlab.graphics3d.Solid; import xyz.marsavic.gfxlab.graphics3d.solids.Ball; import xyz.marsavic.gfxlab.graphics3d.solids.Group; import xyz.marsavic.gfxlab.graphics3d.solids.HalfSpace; import xyz.marsavic.gfxlab.graphics3d.textures.Grid; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; public class SpectrumTest extends Scene.Base { public SpectrumTest() { var materialUVWalls = (F1) (uv -> Material.matte(1.0)); SplineSpectrum s; var materialUVWallsL = Grid.standard(w -> 1.0); var materialUVWallsR = Grid.standard(w -> 0.1); Collection solids = new ArrayList<>(); Collections.addAll(solids, HalfSpace.pn(Vec3.xyz(1, 0, 10), Vec3.xyz( 1, 0, -1), materialUVWallsL), HalfSpace.pn(Vec3.xyz( -1, 0, 10), Vec3.xyz(-1, 0, -1), materialUVWallsR), HalfSpace.pn(Vec3.xyz(0, 2, 0), Vec3.xyz( 0, -1, 0), materialUVWallsL), HalfSpace.pn(Vec3.xyz(0, -2, 10), Vec3.xyz( 0, 1, 0), materialUVWallsL), HalfSpace.pn(Vec3.xyz( 0, 0, 8), Vec3.xyz(0, 1, -1), uv -> Material.GLASS.refractiveIndex( // w -> 1.6 + (w-400)/(800-400) * (1.55 - 1.6) w -> 1.5 )), HalfSpace.pn(Vec3.xyz( 0, 0, -6), Vec3.xyz( 0, 0, 1), materialUVWallsR) ); Collections.addAll(lights, Light.ps(Vec3.xyz(0, 1.0, -1.0), w -> 1.0), Light.ps(Vec3.xyz(0, -1.0, 9.0), w -> 1.0) ); solid = Group.of(solids); } }