Pictures on the faces of a Cube

Download the source code.
Play the video
Back








10









20









30









40









50









60









70


#!/usr/bin/env lua5.1

require[[fp]]
require[[fptheme]]
require[[fpeffects]]
require[[fpwidgets]]

bg = fp.image{ style = "background", focus = true }

filenames = { "greenapple.jpg", "candy.jpg", "shell.jpg", "sunny.jpg",
	      "splash1.jpg", "cactus.jpg" }

-- Six sides to the cube, six images
assert(#filenames == 6)

-- We display the images.  The images must be first displayed in order for the
-- 3D textures to be created.
images = {}
for i = 1, #filenames do
   images[i] = fp.image{ file = "data/"..filenames[i],
			 x = 100*(i-1), y = 0, w = 100, h = 100 }
end

-- In this cube example we rotate with finer degrees of control along
-- all axes.

-- The initial settings for cube orientation
local tlt = 25
local dtlt = 1
local angl = 40
local dangl = 1

-- Key-handler (arrow keys) callback to control rotation
bg.cb.key_down.down = function(key)

	if not cube then return end

	if key.keyname == "Left" then
	    angl = angl-dangl
	elseif key.keyname == "Right" then
	    angl = angl+dangl
	elseif key.keyname == "Up" then
	    tlt = tlt+dtlt
	elseif key.keyname == "Down"  then
	    tlt = tlt-dtlt 
	end

	cube:tilt_set(tlt)
	cube:angle_set(angl)
	return true
end

-- We need to delay the creation of the cube until the images are rendered
timer = fp.timer(0.1, function()
			 -- The tilt parameter specifies vertical title
			 -- The angle parameter specifies the offset of the 
			 -- faces from 0 degress.
			 cube = fp.cube{ x = 150, y = 80,
					 w = 300, h = 300, focus = false,
					 tilt = tlt, angle = angl }
			 -- Add each image to the cube and hide the original
			 -- image once rendered.
			 for i = 1, #filenames do
			    cube:add(images[i])
			    images[i]:layer_set(-999)
			 end
			 return false
		      end)

-- By default the cube intercepts the left and right button down events
-- and rotates so there is no need to add event callbacks for anything else
-- It stops spinning at a multiple of the given angle.
fp.begin()