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

У меня есть 3D-сцена, созданная с помощью пакета Rrgl.

  • Я могу сохранить его в формате 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?


person AF7    schedule 27.02.2015    source источник
comment
Файл примера больше недоступен для загрузки со связанного сайта. Можете ли вы загрузить его снова, или у вас есть другой простой способ воспроизвести проблему с помощью PLY?   -  person WhiteViking    schedule 12.09.2015
comment
@WhiteViking, спасибо, что сообщили мне. Я обновил ссылку для скачивания, теперь она должна работать.   -  person AF7    schedule 13.09.2015
comment
stackoverflow.com/q/12781129/471093 и r.789695.n4.nabble.com/Exporting-an-rgl-graph-td1872712.html может оказаться полезным   -  person baptiste    schedule 13.09.2015
comment
Вы можете избежать ошибки с помощью writePLY("alps3d.ply", withNormals = F). Для этой конкретной модели, которая, кажется, имеет только плоскую геометрию, отсутствие нормалей вершин не имеет большого значения. Таким образом, вы получаете файл PLY с информацией о геометрии и цвете. Однако... MeshLab не считывает информацию о цвете из файлов PLY. Таким образом, использование MeshLab для преобразования в U3D также не является жизнеспособным подходом.   -  person WhiteViking    schedule 17.09.2015
comment
@WhiteViking Спасибо. Кажется, это работает, но, как вы говорите, Meshlab в этом случае менее полезен. Кажется, что 3d-tool может иметь эту опцию... 3d-tool.com /en_cad-viewer-formats.htm   -  person AF7    schedule 17.09.2015
comment
спасибо @baptiste, видел их. Надеялся получить совет по какой-нибудь другой стратегии.   -  person tim riffe    schedule 19.09.2015
comment
Раньше я экспортировал rgl-объект с помощью persp3d и rgl.snapshot, последний может экспортировать картинку. Для 3D-фильмов я использовал movie3d, у которого есть возможность экспортировать фильмы.   -  person Lamothy    schedule 12.04.2016


Ответы (2)


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

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

person user2554330    schedule 13.06.2016
comment
Это полезно @user2554330 . Если вы его видели, не могли бы вы направить нас к ресурсу о том, как использовать вывод writeASY() в документе LaTeX для полноты картины? (Разве это сейчас больше вопрос о LaTeX?) Стандартная документация по асимптоте и страницы справки, которые я видел, не выглядят так, чтобы точно охватить то, что требуется, и у меня было много ошибок компиляции, используя советы от tex .stackexchange.com/questions/111655/ - person Jason Whyte; 16.08.2016

Вы можете использовать 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, что позволяет вносить некоторые изменения вручную.

person Stéphane Laurent    schedule 21.02.2018