54 lines
2 KiB
Java
54 lines
2 KiB
Java
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<Material, Vector>) (uv -> Material.matte(1.0));
|
|
SplineSpectrum s;
|
|
var materialUVWallsL = Grid.standard(w -> 1.0);
|
|
|
|
var materialUVWallsR = Grid.standard(w -> 0.1);
|
|
|
|
Collection<Solid> 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);
|
|
}
|
|
}
|