Created
May 12, 2009 23:55
-
-
Save jashkenas/110792 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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