On 24/10/2008 1:55 PM, Dani wrote:> Dear list,
>
> I'm using the function "movie3d" in the package
"rgl" to create a .gif
> animation of a 3d graphic. The program "ImageMagik" is working
> properly, R packages are working, basic examples available in the
> manual also working fine.
>
> Problem Solved: when I tried to create more complex movies, i.e.
> combining different views and zooming, the R-console crashed or
> returned error playing the function returned by par3dinterp, using
> heterogeneous parameters. When not crashing, "Error:
> length(userMatrix) == 16 * length(times) is not TRUE."
I'm glad you solved your problem. Just one comment on your solution:
> Counterexample:
> #rotating
> v=seq(from=1,to=61,by=2.5)
> for (i in 1:length(v)){
> rgl.viewpoint(270+v[i],80-(v[i]/1)) #This is a counterexample
It's always a bad idea to mix rgl.* functions with *3d functions. In
this case you might get away with it, but you'd be better off using
view3d().
Duncan Murdoch
> M <- par3d()
> lista[[k]]=M;
> k=k+1;
> }
> #zooming
> v=seq(from=1,to=0.12,by=-0.02)
> for (i in 1:length(v)){
> par3d(zoom=v[i])
> M <- par3d()
> lista[[k]]=M; k=k+1;
> }
> #-------------- Ending view
> rgl.viewpoint(326,40)
> par3d(zoom=1)
> M <- par3d()
> lista[[k]]=M; k=k+1;
>
> p = par3dinterp(lista)
> play3d(p) # or movie3d (p,12)
> ----------------------------------------------------------------------
> Light: after 2 weeks fighting with the function + a bag of coffee, I
> found this function really helpful and I WANTED TO SHARE since I
> didn't find anything like that in the web.
> Step 1: set the zooming parameters to each view you want in a separate
> vector (list_zooming) while accumulating the views in the
> list_userMatrix
> #rotating
> v=seq(from=1,to=61,by=30)#2.5)
> for (i in 1:length(v))
> {
> rgl.viewpoint(270+v[i],80-(v[i]/1))
> M <- par3d("userMatrix") #This is an example who
runs perfectly
> list_userMatrix[[k]]=M;
> k=k+1;
> }
> list_z=rep(1,length(v)); list_zooming=c(list_zooming,list_z)
>
> #zooming
> v=c(1,0.12)#seq(from=1,to=0.12,by=-0.2)
> for (i in 1:length(v))
> {
> list_zooming=c(list_zooming,v[i])
> M <- par3d("userMatrix")
> list_userMatrix[[k]]=M; k=k+1;
> }
> #--------------
> rgl.viewpoint(345,30)
> par3d(zoom=0.1)
> M <- par3d("userMatrix")
> list_userMatrix[[k]]=M; k=k+1;
>
> p = par3dinterp( userMatrix=list_userMatrix,zoom=list_zooming)
>
> movie3d (p,duration=12)#as.integer(length(list_userMatrix)))
> #play3d(p)
>
> Hope it was helpful! Good lucky!
> --
> -------------------------------------
> Daniela
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.