Ruby OpenGL Walk Bounce
Pretty bouncing effect that gives an illusion that you are walking forward
Normally we would move the camera around and draw the 3D environment relative to the camera position. Here is a trick on how to do it very inexpensively.
- Rotate and translate the camera position according to user commands
- Rotate the world around the origin in the opposite direction of the camera rotation (giving the illusion that the camera has been rotated)
-
Translate the world in the opposite manner that the camera has been translated (again, giving the illusion that the camera has moved)
def update @ang_conv = 0.0174532925 # pi / 180 @y_ang -= 1.5 if button? Button::KbRight @y_ang += 1.5 if button? Button::KbLeft if button?(Button::KbUp) @x_pos -= Math.sin(@y_ang * @ang_conv) * 0.05 @z_diff -= Math.cos(@y_ang * @ang_conv) * 0.05 @bounce_ang > 359 ? @bounce_ang = 0 : @bounce_ang += 10 @bouncing = Math.sin(@bounce_ang * @ang_conv) / 20 end if button?(Button::KbDown) @x_pos += Math.sin(@y_ang * @ang_conv) * 0.05 @z_diff += Math.cos(@y_ang * @ang_conv) * 0.05 @bounce_ang <= 1 ? @bounce_ang = 359 : @bounce_ang -= 10 @bouncing = Math.sin(@bounce_ang * @ang_conv) / 20 end @z_diff -= 0.3 if button? Button::KbPageUp @z_diff += 0.3 if button? Button::KbPageDown @y_pos -= 0.05 if button? Button::KbW @y_pos += 0.05 if button? Button::KbS @x_pos += 0.05 if button? Button::KbD @x_pos -= 0.05 if button? Button::KbA end def draw x = -@x_pos y = -@bouncing - 0.25 z = -@z_diff scene_angle = 360 - @y_ang gl glRotatef(@z_diff,1,0,0) #rotate to be able to look up or down glRotatef(scene_angle,0,1,0); #rotate on direction user is facing glTranslate(x, y, z) #translate the world in opposite of camera end end
Written by Nickolay Schwarz
Related protips
Have a fresh tip? Share with Coderwall community!
Post
Post a tip
Best
#Ruby
Authors
Sponsored by #native_company# — Learn More
#native_title#
#native_desc#