Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
|
|
@ -0,0 +1,73 @@
|
|||
import "mathUtil"
|
||||
scale = 250
|
||||
radius = sqrt(scale^2)
|
||||
|
||||
Face = new Sprite
|
||||
Face.image = file.loadImage("/sys/pics/shapes/SquareThin.png")
|
||||
|
||||
clear; gfx.clear color.gray
|
||||
sprites = display(4).sprites
|
||||
|
||||
// build a sprite for each side
|
||||
for i in range(0, 3)
|
||||
sp = new Face
|
||||
sp.x = 480; sp.y = 320
|
||||
yBot = -sin(pi/4)
|
||||
yTop = sin(pi/4)
|
||||
cosAngL = cos(i*pi/2); sinAngL = sin(i*pi/2)
|
||||
cosAngR = cos((i+1)*pi/2); sinAngR = sin((i+1)*pi/2)
|
||||
sp.corners3d = [
|
||||
[cosAngL, yBot, sinAngL], [cosAngR, yBot, sinAngR],
|
||||
[cosAngR, yTop, sinAngR], [cosAngL, yTop, sinAngL] ]
|
||||
sp.color = [color.yellow, color.aqua, color.pink, color.lime][i]
|
||||
sprites.push sp
|
||||
end for
|
||||
// ...and one for the top
|
||||
top = new Face
|
||||
top.x = 480; top.y = 320
|
||||
top.corners3d = []
|
||||
for i in range(0, 3)
|
||||
top.corners3d.push [cos(i*pi/2), sin(pi/4), sin(i*pi/2)]
|
||||
end for
|
||||
sprites.push top
|
||||
|
||||
// Rotate the given [x,y,z] point by some number of degrees
|
||||
// around the Y axis, then project to the screen.
|
||||
rotateAndProject = function(point3d, rotDegrees)
|
||||
radians = rotDegrees * pi/180
|
||||
cosAng = cos(radians); sinAng = sin(radians)
|
||||
// First, rotate around the Y axis in 3D space
|
||||
x = point3d[0] * cosAng - point3d[2] * sinAng
|
||||
y = point3d[1]
|
||||
z = point3d[0] * sinAng + point3d[2] * cosAng
|
||||
// Then, project this to the screen
|
||||
result = [480 + x * scale, 320 + y * scale + z*0]
|
||||
p = (8 - z) / 8 // (perspective factor)
|
||||
return mathUtil.lerp2d(result, [480,800], 1-p)
|
||||
end function
|
||||
|
||||
// Position all the sprites where they should be on screen for the given rotation.
|
||||
positionSprites = function(rotDegrees)
|
||||
for sp in sprites
|
||||
corners = []
|
||||
for i in range(0,3)
|
||||
corners.push rotateAndProject(sp.corners3d[i], rotDegrees)
|
||||
end for
|
||||
sp.setCorners corners
|
||||
if sp == top then continue
|
||||
if corners[1][0] > corners[0][0] then
|
||||
sp.tint = sp.color
|
||||
else
|
||||
sp.tint = color.clear
|
||||
end if
|
||||
end for
|
||||
end function
|
||||
|
||||
// Main program
|
||||
rot = 0
|
||||
while not key.pressed("escape") and not key.pressed("q")
|
||||
yield
|
||||
positionSprites rot
|
||||
rot = rot + 1
|
||||
end while
|
||||
key.clear
|
||||
Loading…
Add table
Add a link
Reference in a new issue