spin3d.RdThis creates a function to use with play3d to
spin an RGL scene at a fixed rate.
A function with header function(time, base = M), where M
is the result of par3d("userMatrix") at the time the function
is created. This function
calculates and returns a list containing userMatrix updated by
spinning the base matrix for time seconds at rpm revolutions per
minute about the specified axis.
Prior to rgl version 0.95.1476, the
subscene argument defaulted to the
current subscene, and any additional entries would
be ignored by play3d. The current
default value of par3d("listeners", dev = dev) means that all subscenes that share
mouse responses will also share modifications
by this function.
play3d to play the animation
# Spin one object
open3d()
plot3d(oh3d(col = "lightblue", alpha = 0.5))
3D plot
if (!rgl.useNULL() && interactive())
play3d(spin3d(axis = c(1, 0, 0), rpm = 30), duration = 2)
# Show spinning sprites, and rotate the whole view
open3d()
spriteid <- NULL
spin1 <- spin3d(rpm = 4.5 ) # the scene spinner
spin2 <- spin3d(rpm = 9 ) # the sprite spinner
f <- function(time) {
par3d(skipRedraw = TRUE) # stops intermediate redraws
on.exit(par3d(skipRedraw = FALSE)) # redraw at the end
pop3d(id = spriteid) # delete the old sprite
cubeid <- shade3d(cube3d(), col = "red")
spriteid <<- sprites3d(0:1, 0:1, 0:1, shape = cubeid,
userMatrix = spin2(time,
base = spin1(time)$userMatrix)$userMatrix)
spin1(time)
}
if (!rgl.useNULL() && interactive())
play3d(f, duration = 2)