[R] rgl and rglwidget: Weird behaviour than animating lines

Nicole Karakin nikakar at gmail.com
Thu Jun 23 11:59:05 CEST 2016


I am trying to follow help and Internet examples to create a very
simple animation of a 3d-line in R. This is just a test and my final
goal is to use this functionality to visually verify results of some
geometrical transformations on 3d-movement data that I am analysing.
So basically I need nothing more than a ‘3d-player’ interface that
allows for usual interaction (rotation, zoom, play, stop, slide).

I figured out that rgl package does the job and I am able to use it
for the sphere/points animation. But now I need to use it on lines and
I get very strange results. In the example below there are 4 points
and two lines (cyan and red) that connect the same points but the red
line is for some reason in the ‘wrong’ place. The animation doesn’t
make sense neither. Now, I am thinking may be it is impossible to do
>> to animate more than one vertex with more than one attribute? But I
don’t see this in documentation and obviously it is possible because
line is animated! I spent quite a long time trying to figure out what
is going on and will appreciate any help/advise/directions on how i
can 'fix' this behaviour.
thanks, Nicole

Ps: the code below is a chunk in the markdown file and I am using Rstudio

#-----------------------------------------
require(rgl)
require(rglwidget)
p11=c(0,0,0)
p21=c(50,50,0)
p12=c(50,0,0)
p22=c(10,50,50)

saveopts <- options(rgl.useNULL = TRUE)
did=list()
did[[1]]=plot3d(rbind(p11,p21,p12,p22), type="s", alpha = 1, lwd = 5,
col = c('brown','darkgreen','orange','green'))
did[[2]]=spheres3d(c(100,100,100), alpha = 1, lwd = 5, col = "blue",radius=2)
did[[3]]=lines3d(rbind(p11,p21),lwd=8, col='cyan',alpha=.9)
did[[4]]=planes3d(0, 0, 1, 0, alpha=.4, col='green')
did[[5]]=lines3d(rbind(p11,p21),lwd=2, col='red')
aspect3d(1, 1, 1)
did[[6]]=grid3d(c("x-", "z-"),at = NULL,col = "gray",lwd = .5,lty = 1,n = 5)
sceneT = rglwidget(elementId = "plot3dT",width=500, height=300) #%>%
rgl.ids()
rgl.attrib(id=did[[3]],attrib = c(1:length(did[[3]])))

playwidget(sceneT,list(
  vertexControl(values = rbind(c(0,0,0,0,0,0),c(50,50,50,50,50,50)),
             vertices = 1:6, attributes = "z", objid = did[[4]], param
= 1:2,interp =T),
  vertexControl(values = r1,
             vertices = 1:2, attributes = c('x',"y","z",'x',"y","z"),
objid = did[[5]], param = 1:2,interp =T)),
  start = 1, stop = 2, step = .1, precision = 3)
options(saveopts)



More information about the R-help mailing list