获取rgl视图参数

Ali*_*Ali 18 3d r rgl

虽然该view3d(theta, phi,...)功能可用于在拍摄3d图表/对象的快照时将观察点旋转到合适的位置,但很难猜测哪个θ和phi值是好的.

一旦显示图表,我们就可以交互式旋转它.但是,无论如何在手动旋转后找出图的theta和phi参数,这样我们就可以以编程方式使用它(即在创建应该具有相同视点的许多图时)?

Moo*_*oks 11

我一直在尝试自己解决这个问题,我认为我有保持用户修改的交互式情节的视角的答案.view3d只影响已打开窗口中的透视,关键是在实际生成绘图之前使用open3d设置窗口和透视图.

换句话说,我们实际上并不需要使用phi和theta角度信息(直接).一旦你生成了一个交互式绘图并获得了你喜欢的视角(你可能想要调整窗口大小或者图像抓取太小),类似下面的内容将提取所需的信息:

zoom<-par3d()$zoom
userMatrix<-par3d()$userMatrix
windowRect<-par3d()$windowRect
Run Code Online (Sandbox Code Playgroud)

然后,下面将打开一个所需大小和透视(和缩放)的窗口,生成绘图,然后抓取图像.

open3d(zoom = zoom, userMatrix = userMatrix, windowRect=windowRect)
perps3d(x=x,y=y,z=z) # plus whatever arguments you need, but ignoring all perspective arguments
rgl.snapshot( filename, fmt="png", top=TRUE)
Run Code Online (Sandbox Code Playgroud)

这是基本思想,可用于自动生成相同视角的图形.您也可以根据需要使用par3d中的scale或fov参数,以及提取和使用信息的相同想法.我认为以上是阿里需要的东西.

在自动生成多个绘图时调用persp3d有点不优雅,因为该功能实际上是为交互式绘图而设计的.我怀疑你可以使用par3d的信息userMatrix,zoom,fov,scale等,以及一些数学(比如阿里)来确定phi,theta,r和d,并将它们直接放入persp中 - 而不是每次都处理persp3d情节,但我没有测试过.


Vik*_*tor 7

无需提取视角。您可以提取 userMatrix

um <- par3d()$userMatrix
Run Code Online (Sandbox Code Playgroud)

然后使用

view3d(userMatrix = um)
Run Code Online (Sandbox Code Playgroud)

视角将恢复。

  • 好的。但是如何改变这些数字以使盒子向左或向右旋转呢? (2认同)