Сохранение 3D-сцены rgl до u3d (для интеграции .pdf)

У меня есть 3D-сцена, сгенерированная с пакетом R rgl.

  • Я могу сохранить его в RTL и OBJ формате через функции rgl, но эти функции не поддерживают цвета.
  • Я могу сохранить его в WebGL, но тогда я не могу найти конвертер WebGL в .u3d и любой способ вставить содержимое WebGL в файл .pdf(сгенерированный LaTeX).
  • Я могу сохранить его в формате PLY, а затем экспортировать в .u3d (например, используя Meshlab), но он дает мне следующую ошибку:

    Error in if (sum(normals[1:3, it[j, i]] * normal) < 0) normals[, it[j,  : 
    missing value where TRUE/FALSE needed 
    

Что я действительно не знаю, как решить.

Здесь - пример файла для воспроизведения проблемы. Для воспроизведения просто загрузите файл в рабочий каталог, выполните R и запустите:

library(rgl)
load("alps3d.Rdata") #This loads the alps3d variable
plot3d(alps3d)
writePLY("alps3d.ply")

Как сохранить 3D-сцену в формате, который можно отнести в формате .pdf, используя LaTeX?

Ответ 1

Вам следует попробовать writeASY(). Он пишет для Asymptote, который может производить PRC, а не U3D, но может быть достаточно хорошим. Я попробовал вашу сцену образца, и для загрузки результата в Acrobat Reader требуется около 5 минут, но в итоге он загружается и работает.

writeASY() - последнее дополнение к rgl; вам нужно будет получить его из копий R-Forge или Github.

Ответ 2

Вы можете использовать rgl.postscript, который позволяет экспортировать в различные форматы, включая pdf. Ну, результат не потрясающий, но это должно зависеть от типа сюжета.

> x <- y <- seq(-10, 10, length = 20)
> z <- outer(x, y, function(x, y) x^2 + y^2)
> persp3d(x, y, z, col = 'lightblue')
> rgl.postscript("persp3d.pdf", "pdf")

введите описание изображения здесь

Вы также можете экспортировать в tex, что позволяет сделать некоторые ручные изменения.