65 lines
2.9 KiB
Java
65 lines
2.9 KiB
Java
package xyz.marsavic.gfxlab.graphics3d.scene;
|
|
|
|
|
|
import javafx.util.Pair;
|
|
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 = Grid.standard(Spectrum.WHITE);
|
|
var materialUVWallsL = Grid.standard(new SplineSpectrum(new Pair[]{
|
|
new Pair<Double, Double>(450.0, 0.2),
|
|
new Pair<Double, Double>(550.0, 0.35),
|
|
new Pair<Double, Double>(650.0, 0.8),
|
|
}));
|
|
var materialUVWallsR = Grid.standard(new SplineSpectrum(new Pair[]{
|
|
new Pair<Double, Double>(450.0, 0.3),
|
|
new Pair<Double, Double>(550.0, 0.75),
|
|
new Pair<Double, Double>(650.0, 0.3),
|
|
}));
|
|
|
|
Collection<Solid> solids = new ArrayList<>();
|
|
Collections.addAll(solids,
|
|
HalfSpace.pn(Vec3.xyz(-1, 0, 0), Vec3.xyz( 1, 0, 0), materialUVWallsL),
|
|
HalfSpace.pn(Vec3.xyz( 1, 0, 0), Vec3.xyz(-1, 0, 0), materialUVWallsR),
|
|
HalfSpace.pn(Vec3.xyz( 0, -1, 0), Vec3.xyz( 0, 1, 0), materialUVWalls),
|
|
HalfSpace.pn(Vec3.xyz( 0, 1, 0), Vec3.xyz( 0, -1, 0), materialUVWalls),
|
|
HalfSpace.pn(Vec3.xyz( 0, 0, 1), Vec3.xyz( 0, 0, -1), materialUVWalls),
|
|
|
|
Ball.cr(Vec3.xyz(-0.3, 0.3, 0.0), 0.4, uv -> Material.GLASS.refractive(new SplineSpectrum(
|
|
new Pair[]{
|
|
new Pair<Double, Double>(450.0, 0.8),
|
|
new Pair<Double, Double>(550.0, 0.35),
|
|
new Pair<Double, Double>(650.0, 0.2),
|
|
}
|
|
))),
|
|
Ball.cr(Vec3.xyz( 0.4, -0.4, 0.0), 0.4, uv -> Material.GLASS),
|
|
Ball.cr(Vec3.xyz(-0.3, -0.4, -0.6), 0.4, uv -> Material.GLASS.refractiveIndex(w -> 2.5)),
|
|
Ball.cr(Vec3.xyz( 0.4, 0.3, 0.6), 0.4, uv -> Material.GLASS.refractiveIndex(w -> 0.6))
|
|
);
|
|
|
|
Collections.addAll(lights,
|
|
Light.pc(Vec3.xyz(-0.7, 0.7, -0.7), Spectrum.WHITE),
|
|
Light.pc(Vec3.xyz(-0.7, 0.7, 0.7), Spectrum.WHITE),
|
|
Light.pc(Vec3.xyz( 0.7, 0.7, -0.7), Spectrum.WHITE),
|
|
Light.pc(Vec3.xyz( 0.7, 0.7, 0.7), Spectrum.WHITE)
|
|
);
|
|
|
|
solid = Group.of(solids);
|
|
}
|
|
}
|