Sha256: d2c9c6b1f24ad94379048c8979b16579eaf31573c7197fade081bf114e983028

Contents?: true

Size: 1.97 KB

Versions: 10

Compression:

Stored size: 1.97 KB

Contents

# TexturedCube
# by Dave Bollinger.
# 
# Drag mouse to rotate cube. Demonstrates use of u/v coords in 
# vertex ) and effect on texture().


def setup  
  size 640, 360, P3D  
  @rotx = PI/4
  @roty = PI/4  
  @tex = load_image "berlin-1.jpg"
  texture_mode NORMAL  # Changed for processing 2.0
  fill 255
  stroke 44, 48, 32  
end

def draw  
  background 0  
  no_stroke  
  translate width/2, height/2, -100  
  rotate_x @rotx
  rotate_y @roty  
  scale 90  
  texture_cube  
end

def texture_cube

# Given one texture and six faces, we can easily set up the uv coordinates
# such that four of the faces tile "perfectly" along either u or v, but the other
# two faces cannot be so aligned.  This code tiles "along" u, "around" the X/Z faces
# and fudges the Y faces - the Y faces are arbitrarily aligned such that a
# rotation along the X axis will put the "top" of either texture at the "top"
# of the screen, but is not otherwised aligned with the X/Z faces. (This
# just affects what type of symmetry is required if you need seamless
# tiling all the way around the cube)

begin_shape QUADS
  
  texture @tex
  
  # +Z "front" face
  vertex -1, -1,  1, 0, 0
  vertex  1, -1,  1, 1, 0
  vertex  1,  1,  1, 1, 1
  vertex -1,  1,  1, 0, 1
  
  # -Z "back" face
  vertex  1, -1, -1, 0, 0
  vertex -1, -1, -1, 1, 0
  vertex -1,  1, -1, 1, 1
  vertex  1,  1, -1, 0, 1
  
  # +Y "bottom" face
  vertex -1,  1,  1, 0, 0
  vertex  1,  1,  1, 1, 0
  vertex  1,  1, -1, 1, 1
  vertex -1,  1, -1, 0, 1
  
  # -Y "top" face
  vertex -1, -1, -1, 0, 0
  vertex  1, -1, -1, 1, 0
  vertex  1, -1,  1, 1, 1
  vertex -1, -1,  1, 0, 1
  
  # +X "right" face
  vertex  1, -1,  1, 0, 0
  vertex  1, -1, -1, 1, 0
  vertex  1,  1, -1, 1, 1
  vertex  1,  1,  1, 0, 1
  
  # -X "left" face
  vertex -1, -1, -1, 0, 0
  vertex -1, -1,  1, 1, 0
  vertex -1,  1,  1, 1, 1
  vertex -1,  1, -1, 0, 1
  
  end_shape  
end
  
def mouse_dragged  
  rate = 0.01
  @rotx += ( pmouse_y - mouse_y ) * rate
  @roty += ( mouse_x - pmouse_x ) * rate  
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
ruby-processing-2.6.3 samples/processing_app/basics/textures/texture_cube.rb
ruby-processing-2.6.2 samples/processing_app/basics/textures/texture_cube.rb
ruby-processing-2.6.1 samples/processing_app/basics/textures/texture_cube.rb
ruby-processing-2.6.0 samples/processing_app/basics/textures/texture_cube.rb
ruby-processing-2.5.1 samples/processing_app/basics/textures/texture_cube.rb
ruby-processing-2.5.0 samples/processing_app/basics/textures/texture_cube.rb
ruby-processing-2.4.4 samples/processing_app/basics/textures/texture_cube.rb
ruby-processing-2.4.3 samples/processing_app/basics/textures/texture_cube.rb
ruby-processing-2.4.2 samples/processing_app/basics/textures/texture_cube.rb
ruby-processing-2.4.1 samples/processing_app/basics/textures/texture_cube.rb