Получить параметры просмотра rgl

В то время как функцию view3d(theta, phi,...) можно использовать для поворота точки просмотра в подходящее место при съемке 3D-диаграмм/объектов, довольно сложно догадаться, какие значения тета и phi хороши.

Как только график показан, мы можем его интерактивно вращать. Но так или иначе, чтобы узнать параметры тета и phi графика после ручного вращения, чтобы мы могли использовать его программно (т.е. При создании множества графиков, которые должны иметь одну и ту же точку зрения)?

Ответ 1

Я пытался сам это решить, и я думаю, что у меня есть ответ для поддержания перспективы пользовательского модифицированного интерактивного сюжета. view3d влияет только на перспективу в уже открытом окне, ключ заключается в том, чтобы использовать open3d для настройки вашего окна и перспектив до фактического создания графика.

Другими словами, нам фактически не нужно использовать информацию о phi и theta angle (напрямую). Как только вы создали интерактивный сюжет и получили понравившуюся вам перспективу (вы, вероятно, захотите изменить размер окна или захват изображения будет слишком маленьким), что-то вроде следующего будет извлекать необходимую информацию:

zoom<-par3d()$zoom
userMatrix<-par3d()$userMatrix
windowRect<-par3d()$windowRect

Затем откроется окно с желаемым размером и перспективой (и масштабированием), сгенерирует график и затем захватит изображение.

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)

Это основная идея и может использоваться для автоматического создания графиков одной и той же перспективы. Вы также можете обходиться с помощью аргументов scale или fov из par3d, как вы сочтете нужным, с той же идеей, чтобы извлекать и использовать информацию. Я думаю, что это то, что потребуется для Али выше.

Немного нецелесообразно вызывать persp3d при автоматическом создании нескольких графиков, потому что эта функция действительно предназначена для интерактивных графиков. Я подозреваю, что вы можете использовать информацию userMatrix, zoom, fov, scale и т.д. Из par3d, а некоторые математики (например, Али), чтобы определить phi, theta, r и d, и перенести их в persp напрямую - вместо того, чтобы иметь дело с persp3d для каждого сюжет, но я не тестировал это.

Ответ 2

Нет необходимости извлекать углы обзора. Вы можете извлечь userMatrix

um <- par3d()$userMatrix

а затем используйте

view3d(userMatrix = um)

Углы обзора будут восстановлены.