2017-08-08 38 views
0

在我的電腦上,我的rgl快照只包含顯示的GL設備的左上角。對於使用屏幕快照工作的使用mayavi的python。但是,使用屏幕外渲染會導致相同的錯誤。可悲的是,我的問題是不可複製的,因爲在家使用相同的腳本應該是可行的。因此,我猜想它必須與mesa相關,但我不知道在哪裏尋找我的錯誤配置。兩臺電腦都在Debian測試下運行,但我已經有一段時間了。我在another thread中發現了關於同樣問題的評論,但沒有提供解決方案。GL快照僅包含左上角

這裏是R代碼我跑:

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

rgl.snapshot所得,而應是rgl screenshot

我使用的Python代碼是

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

結果是等價的。第一個(mlab.savefig)按照它應該的方式工作,但第二個(ex.write)僅在上面的R示例中產生左上角。

有沒有人遇到同樣的問題並解決了它?有什麼建議麼?需要更多信息(p.e.glxinfo,...)?

感謝和親切的問候

約爾格

+0

聽起來像你的MesaGL驅動程序正在返回有關顯示不一致的大小信息。不知道如何解決這個問題,除了確保你有最新的顯卡驅動程序和Mesa的更新。 – user2554330

回答

0

後安靜了一會兒,幾個內核更新和檯面的更新,我切換到專有的NVIDIA驅動程序和它的工作。我寧願堅持未被污染的內核,bur沒有找到更好的解決方案。