2016-04-17 7 views
4

Sollte rgl.postscript() nicht für einen kopflosen Server funktionieren, d. H. Wenn Optionen (rgl.useNULL = TRUE)? Ich weiß, dass rgl.snapshot() nicht funktioniert.rgl.postscript wenn rgl.useNULL = TRUE

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") 

Das gibt mir "In rgl.postscript (" test.pdf "fmt = "pdf"): Postscript-Konvertierung fehlgeschlagen".

Antwort

3

Es könnte in einigen Fällen tun, aber derzeit tut es nicht. Ein Problem ist, dass, wenn rgl mit dem Null-Gerät gestartet wird, es nicht sogar in den OpenGL-Funktionen verknüpfen wird, und rgl.postscript() verwendet einige von ihnen.

Bearbeiten: Sorry, die "keine Verknüpfung" ist, was ich möchte. Derzeit muss es zwar verlinkt werden, aber es wird nicht den Initialisierungscode ausführen, daher sollte es in Kontexten (z. B. einem kopflosen Server) funktionieren, auf denen keine Anzeige verfügbar ist.

Auf einem kopflosen Server könnten Sie Xvfb für einen "virtuellen Framepuffer" verwenden. Ich habe nicht viel Erfahrung damit, aber ich denke, ich habe gehört, dass rgl.snapshot nicht richtig behandelt wird. Ich würde erwarten, dass rgl.postscript funktioniert.

Im Prinzip könnten Sie auch in WebGL rendern und dann mit einem anderen Tool die Ausgabe in das gewünschte Format konvertieren. Ich weiß nicht, ob solche Werkzeuge existieren.

+1

Okay, danke für die Antwort. Also gibt es derzeit keine Möglichkeit, ein Bild des rgl-Plots auf einem kopflosen Server aufzunehmen? – jorkku

Verwandte Themen