Difficulty |
2 |
Reading material |
def scene_at(now)
{
var t = Animations.ease( Animations.animate( 0, 3, seconds(5) ), Easing.quintic_out() )[now]
var camera = Cameras.perspective( [ "eye": pos(-3+2*t, 2+t/3, 5),
"look_at": pos(0,0,0) ] )
var square1_material = Materials.uniform( [ "ambient": Colors.white() * 0.1,
"diffuse": Colors.red() * 0.8,
"specular": Colors.white() * 0.5,
"specular_exponent": 10,
"reflectivity": 0.1] )
var square2_material = Materials.uniform( [ "ambient": Colors.white() * 0.1,
"diffuse": Colors.green() * 0.8,
"specular": Colors.white() * 0.5,
"specular_exponent": 10,
"reflectivity": 0.1] )
var square3_material = Materials.uniform( [ "ambient": Colors.white() * 0.1,
"diffuse": Colors.blue() * 0.8,
"specular": Colors.white() * 0.5,
"specular_exponent": 10,
"reflectivity": 0.1] )
var white = Materials.uniform( [ "ambient": Colors.white() * 0.1,
"diffuse": Colors.white() * 0.8 ] )
var left = decorate(square1_material, translate(vec(-4+t, 0, 0), yz_square(2)))
var right = decorate(square1_material, translate(vec(4-t, 0, 0), yz_square(2)))
var up = decorate(square2_material, translate(vec(0,4-t,0), xz_square(2)))
var down = decorate(square2_material, translate(vec(0,-4+t,0), xz_square(2)))
var front = decorate(square3_material, translate(vec(0,0,4-t), xy_square(2)))
var back = decorate(square3_material, translate(vec(0,0,-4+t), xy_square(2)))
var sides = union([left, right, up, down, back, front])
var plane_material = white
var plane = decorate(plane_material, translate(vec(0,-2,0), xz_plane()))
var root = union( [ sides, plane ] )
var lights = [ Lights.omnidirectional( pos(5,5,5), Colors.white() ) ]
create_scene(camera, root, lights)
}
var raytracer = Raytracers.v6()
var renderer = Renderers.standard( [ "width": 500,
"height": 500,
"sampler": Samplers.multijittered(2),
"ray_tracer": raytracer ] )
pipeline( scene_animation(scene_at, seconds(5)),
[ Pipeline.animation(30),
Pipeline.renderer(renderer),
Pipeline.studio() ] )
1. Implementation
Implement the rectangle primitive.
|
Implement the square primitive.
|
Implement a box primitive.
should create a box centered around \((0, 0, 0)\), with dimensions \(4 \times 2 \times 1\). |
Implement a cube primitive.
|
2. Evaluation
Reproduce the following animation: