Skip to content

Commit ee84e8b

Browse files
committed
raytracer
1 parent 4b479b0 commit ee84e8b

File tree

2 files changed

+95
-0
lines changed

2 files changed

+95
-0
lines changed
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
#!/usr/bin/env jruby
2+
# frozen_string_literal: true
3+
require 'propane'
4+
require 'joonsrenderer'
5+
6+
class Animation < Propane::App
7+
include_package 'joons'
8+
9+
attr_reader :jr, :eye, :center, :up, :count, :radius, :file_name
10+
11+
def settings
12+
size(800, 600, P3D)
13+
end
14+
15+
def setup
16+
sketch_title 'Animation'
17+
@file_name = 'Animation'
18+
@jr = JoonsRenderer.new(self)
19+
# Camera Setting.
20+
@eye = Vec3D.new(0, 0, 120)
21+
@center = Vec3D.new(0, 0, -1)
22+
@up = Vec3D.new(0, 1, 0)
23+
@count = 0
24+
@radius = 35
25+
end
26+
27+
def draw
28+
jr.render # The draw loop that comes next is rendered
29+
jr.begin_record # Make sure to include things you want rendered.
30+
kamera(eye: eye, center: center, up: up)
31+
perspektiv(fov: PI / 4.0, aspect_ratio: 4 / 3.0, near_z: 5, far_z: 10_000)
32+
jr.background('cornell_box', 100, 100, 100) # Cornell Box: width, height, depth.
33+
jr.background('gi_ambient_occlusion') # Global illumination.
34+
# Sun.
35+
translate(0, -15, 0)
36+
jr.fill('light', 1, 60, 60)
37+
sphere(5)
38+
# Planet, revolving at +3 degrees per frame.
39+
translate(radius * DegLut.cos(count * 3), 0, radius * DegLut.sin(count * 3))
40+
jr.fill('mirror')
41+
sphere(5)
42+
jr.end_record # Make sure to end record.
43+
# Display rendered image if render is completed, and the argument is true.
44+
jr.display_rendered(true)
45+
save_frame(format("%s%s", file_name, "_###.png"))
46+
@count += 1
47+
no_loop if (count > 120)
48+
end
49+
end
50+
51+
Animation.new
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
#!/usr/bin/env jruby
2+
# frozen_string_literal: true
3+
require 'propane'
4+
require 'joonsrenderer'
5+
6+
class MySketch < Propane::App
7+
include_package 'joons'
8+
9+
attr_reader :jr, :eye, :center, :up
10+
11+
def settings
12+
size 800, 600, P3D
13+
end
14+
15+
def setup
16+
sketch_title 'My Sketch'
17+
@jr = JoonsRenderer.new(self)
18+
# Camera Setting.
19+
@eye = Vec3D.new(0, 0, 120)
20+
@center = Vec3D.new(0, 0, -1)
21+
@up = Vec3D.new(0, 1, 0)
22+
end
23+
24+
def draw
25+
jr.begin_record # Make sure to include things you want rendered.
26+
kamera(eye: eye, center: center, up: up)
27+
perspektiv(fov: PI / 4.0, aspect_ratio: 4 / 3.0, near_z: 5, far_z: 10_000)
28+
jr.background('cornell_box', 100, 100, 100) # Cornell Box: width, height, depth.
29+
jr.background('gi_instant') # Global illumination.
30+
translate(0, 10, -10)
31+
rotate_y(-PI / 8)
32+
rotate_x(-PI / 8)
33+
jr.fill('diffuse', 255, 255, 255)
34+
box(20)
35+
jr.end_record # Make sure to end record.
36+
jr.display_rendered(true) # Display rendered image if render is completed, and the argument is true.
37+
end
38+
39+
def key_pressed
40+
jr.render if (key == 'r' || key == 'R') # Press 'r' key to start rendering.
41+
end
42+
end
43+
44+
MySketch.new

0 commit comments

Comments
 (0)