82 lines
2.2 KiB
Plaintext
82 lines
2.2 KiB
Plaintext
// BVH Stress Test Scene - Grid of spheres
|
|
let scene = Scene();
|
|
|
|
// Camera
|
|
let camera = Camera(P(0.0, 2.0, 5.0), P(0.0, 0.0, 0.0), V(0.0, 1.0, 0.0));
|
|
scene.addCamera("main", camera);
|
|
|
|
// Lights
|
|
let light = Light(P(3.0, 5.0, 3.0), V(0.8, 0.8, 0.8), V(0.05, 0.05, 0.05));
|
|
light.active(true);
|
|
scene.addLight("key", light);
|
|
|
|
let light2 = Light(P(-3.0, 4.0, -2.0), V(0.4, 0.4, 0.6), V(0.05, 0.05, 0.05));
|
|
light2.active(true);
|
|
scene.addLight("fill", light2);
|
|
|
|
let ambient = Ambient(V(0.1, 0.1, 0.1));
|
|
ambient.active(true);
|
|
scene.addLight("ambient", ambient);
|
|
|
|
// Materials
|
|
let kd = V(0.8, 0.2, 0.2);
|
|
let ks = V(0.3, 0.3, 0.3);
|
|
let kr = V(0.0, 0.0, 0.0);
|
|
let red = Material(kd, ks, kr, 10.0);
|
|
scene.addMaterial("red", red);
|
|
|
|
let kd = V(0.2, 0.2, 0.8);
|
|
let ks = V(0.3, 0.3, 0.3);
|
|
let kr = V(0.0, 0.0, 0.0);
|
|
let blue = Material(kd, ks, kr, 10.0);
|
|
scene.addMaterial("blue", blue);
|
|
|
|
let kd = V(0.2, 0.8, 0.2);
|
|
let ks = V(0.3, 0.3, 0.3);
|
|
let kr = V(0.0, 0.0, 0.0);
|
|
let green = Material(kd, ks, kr, 10.0);
|
|
scene.addMaterial("green", green);
|
|
|
|
let kd = V(0.8, 0.8, 0.2);
|
|
let ks = V(0.3, 0.3, 0.3);
|
|
let kr = V(0.0, 0.0, 0.0);
|
|
let yellow = Material(kd, ks, kr, 10.0);
|
|
scene.addMaterial("yellow", yellow);
|
|
|
|
let kd = V(0.8, 0.4, 0.8);
|
|
let ks = V(0.3, 0.3, 0.3);
|
|
let kr = V(0.1, 0.1, 0.1);
|
|
let purple = Material(kd, ks, kr, 15.0);
|
|
scene.addMaterial("purple", purple);
|
|
|
|
// Floor
|
|
let floor = RectangleUnit();
|
|
let floor_node = Node(floor, green);
|
|
floor_node.rotate(-90.0, 0.0, 0.0);
|
|
floor_node.translate(0.0, -1.5, 0.0);
|
|
floor_node.scale(5.0, 5.0, 1.0);
|
|
scene.addNode("floor", floor_node);
|
|
|
|
// Grid of spheres: 5 x 4 x 5 = 100 spheres
|
|
let materials = [red, blue, green, yellow, purple];
|
|
let count = 0;
|
|
|
|
for x in range(-2, 3) {
|
|
for y in range(0, 4) {
|
|
for z in range(-2, 3) {
|
|
let mat_idx = count % 5;
|
|
let mat = materials[mat_idx];
|
|
let sphere = Sphere(P(0.0, 0.0, 0.0), 0.15);
|
|
let node = Node(sphere, mat);
|
|
let px = x.to_float() * 0.7;
|
|
let py = y.to_float() * 0.7 - 1.0;
|
|
let pz = z.to_float() * 0.7 - 1.0;
|
|
node.translate(px, py, pz);
|
|
scene.addNode("s" + count, node);
|
|
count += 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
scene
|