rgl.postscript()不能在 headless 服务器上工作,即,当options(rgl.useNULL = TRUE)时吗?我知道rgl.snapshot()无法正常工作。

library(rgl)
options(rgl.useNULL = TRUE)
open3d()
x <- sort(rnorm(1000))
y <- rnorm(1000)
z <- rnorm(1000) + atan2(x, y)
plot3d(x, y, z, col = rainbow(1000))
rgl.postscript("test.pdf",fmt="pdf")

这给我“在rgl.postscript(“test.pdf”,fmt =“pdf”)中:Postscript转换失败”。

最佳答案

在某些情况下可以这样做,但目前还不能。一个问题是,如果rgl从空设备启动,它甚至都不会链接到OpenGL函数中,而rgl.postscript()会使用其中的一些功能。

编辑:对不起,“无链接”是我想要的。当前它确实需要链接,但是它不会运行初始化代码,因此它应该在没有显示可用的上下文(例如 headless 服务器)中工作。

在 headless 服务器上,可以将Xvfb用作“虚拟帧缓冲区”。我没有很多经验,但是我想我听说它不能正确处理rgl.snapshot。我希望rgl.postscript能正常工作。

原则上,您也可以在WebGL中进行渲染,然后使用其他工具将输出转换为所需的格式。我不知道是否存在任何此类工具。

关于rgl.useNULL = TRUE时的rgl.postscript,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36682656/

10-12 17:59