スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

rgl.snapshot(), movie3d()などで取得した画像が真っ黒になるトラブルの回避

$$

chooseCRANmirror()
install.packages("rgl")
library(rgl)

open3d()
plot3d(oh3d(col="lightblue", alpha=0.5))
spriteid <- NULL
spin1 <- spin3d(rpm=3 ) # the scene spinner
spin2 <- spin3d(rpm=6 ) # 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)
}

setwd("C:/R/spin3dtest")
rgl.bringtotop()
movie3d( f, duration=5, dir="C:/Users/R/spin3dtest",
clean=F, convert=F, top=T)
movieEPS( f, duration=5, dir="C:/Users/R/spin3dtest",
clean=F, convert=F, top=T)

movieEPS <- function (f, duration, dev = rgl.cur(), ..., fps = 10, movie = "movie",
frames = movie, dir = tempdir(), convert = TRUE, clean = TRUE,
verbose = TRUE, top = TRUE, type = "gif", startTime = 0)
{
olddir <- setwd(dir)
on.exit(setwd(olddir))
for (i in round(startTime * fps):(duration * fps)) {
time <- i/fps
if (rgl.cur() != dev)
rgl.set(dev)
par3d(f(time, ...))
filename <- sprintf("%s%03d.eps", frames, i)
if (verbose) {
cat("Writing", filename, "\r")
flush.console()
}
rgl.bringtotop()
rgl.postscript(filename = filename, fmt = "eps")
}
cat("\n")
if (.Platform$OS.type == "windows")
system <- shell
if (is.logical(convert) && convert) {
version <- system("convert --version", intern = TRUE)
if (!length(grep("ImageMagick", version)))
stop("ImageMagick not found")
filename <- paste(movie, ".", type, sep = "")
if (verbose)
cat("Will create: ", file.path(dir, filename), "\n")
convert <- "convert -delay 1x%d %s*.eps %s.%s"
}
if (is.character(convert)) {
convert <- sprintf(convert, fps, frames, movie, type,
duration, dir)
if (verbose) {
cat("Executing: ", convert, "\n")
flush.console()
}
system(convert)
if (clean) {
if (verbose)
cat("Deleting frames.\n")
for (i in 0:(duration * fps)) {
filename <- sprintf("%s%03d.eps", frames, i)
unlink(filename)
}
}
}
}


後、Cygwinのconvertコマンドでpngなどに変え、何らかの方法でgifアニメに統合させる。

convert -density 300 movie033.eps movie033.png
スポンサーサイト

コメントの投稿


非公開コメント

コメント

Profile

zoa

Author:zoa
Metropolis (1927)

Calendar
05 | 2017/06 | 07
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -
Labels
Admin
Previous Posts
Recent Comments
Recent Trackback
Archive
このページのトップへ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。