Learn R Programming

rgl (version 0.100.54)

spin3d: 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 = rgl.cur(), 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.

See Also

play3d to play the animation

Examples

Run this code
# NOT RUN {
# Spin one object
open3d()
plot3d(oh3d(col = "lightblue", alpha = 0.5))
if (!rgl.useNULL())
  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

    rgl.pop(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())
  play3d(f, duration = 2)
# }

Run the code above in your browser using DataLab