spin3d {rgl} | R Documentation |
Create a function to spin a scene at a fixed rate
Description
This creates a function to use with play3d
to
spin an RGL scene at a fixed rate.
Usage
spin3d(axis = c(0, 0, 1), rpm = 5,
dev = cur3d(), subscene = par3d("listeners", dev = dev))
Arguments
axis |
The desired axis of rotation |
rpm |
The rotation speed in rotations per minute |
dev |
Which RGL device to use |
subscene |
Which subscene to use |
Value
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
.
Note
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.
Author(s)
Duncan Murdoch
See Also
play3d
to play the animation
Examples
# Spin one object
open3d()
plot3d(oh3d(col = "lightblue", alpha = 0.5))
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)