2017-08-08 8 views
0

Auf meinem Computer bei der Arbeit enthalten meine rgl-Snapshots nur die obere linke Ecke des angezeigten GL-Geräts. Für Python mit mayavi funktioniert der Onscreen-Snapshot. Das Verwenden des Offscreen-Renderings führt jedoch zu demselben Fehler. Leider ist mein Problem nicht reproduzierbar, da zu Hause mit dem gleichen Skript funktioniert wie es sollte. Daher denke ich, dass es mit Mesa verwandt sein muss, aber ich habe keine Ahnung, wo ich nach meiner Fehlkonfiguration suchen soll. Beide Computer arbeiten unter Debian-Tests, aber ich habe dieses Problem schon seit einiger Zeit. Ich fand einen Kommentar in another thread über das gleiche Problem, aber keine Lösung wurde zur Verfügung gestellt.GL-Snapshots enthalten nur die obere linke Ecke

ist die R-Code Ich lief:

library(rgl) 
shade3d(cylinder3d(matrix(c(1, -1, 2, -2, 0, 5), 2)), color="red") 
rgl.viewpoint(0, -55, fov=30, zoom=0.6) 
rgl.snapshot("rgl2.png") 

Resultierende in rgl.snapshot, sollte aber rgl screenshot

Der Python-Code I entspricht

from mayavi import mlab 

kwargs = dict(color=(.0,.33,.0), mode='cone', resolution=20, scale_mode='none', scale_factor=0.12, opacity=0.67) 
cone = mlab.quiver3d(0, 0, 0, -1.0, 0.0, -1.0, **kwargs) 
mlab.savefig('mayavi.png') 
mlab.close() 

from tvtk.api import tvtk 
from tvtk.common import configure_input_data 

mlab.options.offscreen = True 
fig=mlab.figure() 
kwargs = dict(color=(.0,.33,.0), mode='cone', resolution=20, scale_mode='none', scale_factor=0.12, opacity=0.67) 
cone = mlab.quiver3d(0, 0, 0, -1.0, 0.0, -1.0, **kwargs) 
rw = tvtk.RenderWindow(size=fig.scene._renwin.size, off_screen_rendering=1) 
rw.add_renderer(fig.scene._renderer) 
w2if = tvtk.WindowToImageFilter() 
w2if.magnification = fig.scene.magnification 
w2if.input = rw 
ex = tvtk.PNGWriter() 
fname = 'mayavi_offscreen.png' 
ex.file_name = fname 
configure_input_data(ex, w2if.output) 
w2if.update() 
ex.write() 

Die Ergebnisse sind verwendet werden. Die erste (mlab.savefig) funktioniert so, wie sie sollte, aber die zweite (ex.write) resultiert nur in der oberen linken Ecke wie in dem obigen R-Beispiel.

Hat jemand das gleiche Problem erfahren und es gelöst? Irgendwelche Vorschläge? Weitere Informationen benötigt (p.glxinfo, ...)?

Dank und freundlichen Grüßen

Jörg

+0

Klingt wie Ihr MesaGL-Treiber inkonsistente Größeninformationen über die Anzeige zurückgibt. Keine Ahnung, wie Sie das beheben können, außer dass Sie sicherstellen, dass Sie das neueste Update beider Grafikkartentreiber und Mesa haben. – user2554330

Antwort

0

Nach ruhig eine Weile und mehrere Kernel-Updates und Mesa-Updates, wechselte ich zu den proprietären nvidia-Treiber und es funktionierte. Ich hätte es vorgezogen, am unbelasteten Kern festzuhalten, aber ich fand keine bessere Lösung.

Verwandte Themen