Как нарисовать до полного окна в rgl? - PullRequest
2 голосов
/ 24 октября 2019

Я рисую 4 подфигуры в rgl для окна, и я хотел бы, чтобы они заполнили доступное пространство:

library(rgl);
rgl::open3d(windowRect = c(0,50, 1200, 1200));
rgl::mfrow3d(2, 2);


rgl::next3d(reuse=FALSE);
rgl::bg3d("yellow");

rgl::next3d(reuse=FALSE);
rgl::bg3d("blue");

rgl::next3d(reuse=FALSE);
rgl::bg3d("red");

rgl::next3d(reuse=FALSE);
rgl::bg3d("green");

Однако результат использует только крошечное зелье окна, похоже,это:

Result of the code given above

Как я могу сделать так, чтобы 4 цветные области охватывали все окно, вместо использования только крошечной части в левом нижнем углу?

Ответы [ 2 ]

1 голос
/ 25 октября 2019

Это отнимает у меня часы, но мне наконец-то удалось заставить это работать надежно самостоятельно. Кажется, вам нужно вызывать par3d () после open3d ().

Также обратите внимание на вызов Sys.sleep, как предложено user20650 в комментариях выше. Без него окно отображается в полном размере только после нажатия на него (на моем компьютере?).

Полный рабочий код:

rgloptions = list("windowRect"=c(50,50,1000,1000));

rgl::open3d();
do.call(rgl::par3d, rgloptions);
Sys.sleep(1);
rgl::mfrow3d(2, 2);

rgl::next3d(reuse=FALSE);
rgl::bg3d("yellow");

rgl::next3d(reuse=FALSE);
rgl::bg3d("blue");

rgl::next3d(reuse=FALSE);
rgl::bg3d("red");

rgl::next3d(reuse=FALSE);
rgl::bg3d("green");

Это дает надежный следующий результат:

enter image description here

0 голосов
/ 24 октября 2019

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

make_box <- function(){library(rgl)
 rgl::open3d(windowRect = c(0,50, 1200, 1200))
 rgl::mfrow3d(2, 2)


 rgl::next3d(reuse=FALSE)
 rgl::bg3d("yellow")

 rgl::next3d(reuse=FALSE)
 rgl::bg3d("blue")

 rgl::next3d(reuse=FALSE)
 rgl::bg3d("red")

 rgl::next3d(reuse=FALSE)
 rgl::bg3d("green")}
 make_box()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...