Skip to content

Instantly share code, notes, and snippets.

@jashkenas
Created May 12, 2009 23:55
Show Gist options
  • Save jashkenas/110792 to your computer and use it in GitHub Desktop.
Save jashkenas/110792 to your computer and use it in GitHub Desktop.
# Move the mouse left and right to change the field of view (fov).
# Click to modify the aspect ratio. The perspective method
# sets a perspective projection applying foreshortening, making
# distant objects appear smaller than closer ones. The parameters
# define a viewing volume with the shape of truncated pyramid.
# Objects near to the front of the volume appear their actual size,
# while farther objects appear smaller. This projection simulates
# the perspective of the world more accurately than orthographic projection.
# The version of perspective without parameters sets the default
# perspective and the version with four parameters allows the programmer
# to set the area precisely.
class Perspective < Processing::App
def setup
render_mode P3D
no_stroke
end
def draw
lights
background 204
camera_y = height/2.0
fov = mouse_x/width.to_f * PI/2.0
camera_z = camera_y / tan(fov / 2.0)
aspect = width.to_f / height.to_f
aspect /= 2.0 if mouse_pressed?
perspective(fov, aspect, camera_z/10.0, camera_z*10.0)
translate width/2.0+30, height/2.0, 0
rotate_x -PI/6
rotate_y PI/3 + mouse_y/height.to_f * PI
box 45
translate 0, 0, -50
box 30
end
end
Perspective.new :width => 640, :height => 360
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment