#r #browser #3d #rotation #rgl
#r #браузер #3D #вращение #rgl
Вопрос:
В пакете world of R statistics rgl позволяет мне создавать 3D-графики, которые я могу вращать с помощью мыши. Есть ли способ экспортировать эти графики в переносимый формат, загрузить их в веб-браузер или другой сторонний инструмент и повернуть их там? Меня особенно интересует решение для веб-браузера, поскольку это позволит мне делиться графиками во внутренней вики.
Если rgl не позволяет этого, существуют ли другие библиотеки или стратегии, которые позволили бы мне выполнить это?
Комментарии:
1. 1 Это интересный вопрос. Я еще не играл с RStudio Server , но теперь мне интересно, может ли он это поддерживать. Кто-нибудь еще запустил серверную программу?
2.
writeWebGL()
Функцияrgl
экспорта пакета в html. Нет ?
Ответ №1:
Вы могли бы попробовать vrmlgen
пакет. Он будет создавать файлы 3d VRML, которые можно отображать с помощью плагина для браузера; вы можете найти плагин в плагине VRML и детекторе браузера.
После установки плагина попробуйте следующее:
require(vrmlgen)
example(bar3d)
ПРИМЕЧАНИЕ: пример кода не открылся автоматически в браузере для меня (RStudio, Win7, Chrome), потому что путь был искажен. Возможно, вам потребуется использовать:
require(stringr)
browseURL(str_replace_all(file.path(outdir, 'barplot.html'), fixed('\'), '/'))
Если вы не хотите устанавливать плагин VRML, вы можете использовать вместо этого X3DOM. Вам понадобится конвертер, но ваши пользователи должны иметь возможность просматривать их только с помощью (современного) браузера. Возможно, вам придется изменить следующий код, чтобы получить правильные пути:
setwd(outdir)
aopt <- 'C:/PROGRA~1/INSTAN~1/bin/aopt' # Path to conversion program
vrml <- 'barplot.wrl'
x3dom <- 'barx.html'
command <- paste(aopt, '-i', vrml, '-N', x3dom)
system(command)
# LOG Avalon Init: 47/616, V2.0.0 build: R-21023 Jan 12 2011
# LOG Avalon Read url
# LOG Avalon Read time: 0.074000
# ============================================
# Call: writeHTML with 1 param
# Write raw-data to barx.html as text/html
# WARNING Avalon Run NodeNameSpace "scene" destructor and _nodeCount == 3
# WARNING Avalon Try to remove nodes from parents
# WARNING Avalon PopupText without component, cannot unregister
# WARNING Avalon Avalon::exitSystem() call and node/obj left: 0/3331
browseURL(file.path(outdir, 'barx.html'))
setwd(curdir)
Комментарии:
1. Я попробую это, но я бы предпочел решение на Javascript (или, при необходимости, flash), которое будет работать с большинством браузеров…
2. Этот ответ работает. Однако для тех, кто следит за зависимостями библиотеки, это стало довольно сложной задачей (не хотелось бы поддерживать клиентов, которым приходилось все это настраивать). Мне это удалось на macOS. В Ubuntu 10.04 была устаревшая библиотека. Я настроен оптимистично, что смогу заставить его работать в некоторых последних версиях Ubuntu с большими усилиями, но на данный момент я выдыхаюсь.
3. у вас не было возможности проверить это должным образом, но, похоже, это лучший ответ из всех, и ответ @Dieter Menne также поддерживает его.
4. Да, но, похоже, обработка действительно стоит попробовать. Спасибо, Джон, возьми Марс вместо Баунти.
Ответ №2:
Для простого решения попробуйте это…
x <- sort(rnorm(1000))
y <- rnorm(1000)
z <- rnorm(1000) atan2(x,y)
plot3d(x,y,z,
col=rainbow(1000),
type = "s",
size=1,
xlab = "x",
ylab = "y",
zlab = "z",
box=T)
# This writes a copy into temporary directory 'webGL', and then displays it
browseURL(paste("file://", writeWebGL(dir=file.path("C:/Your-Directory-Here/", "webGL"), width=700), sep=""))
откройте index.html файл в Firefox или аналогичном браузере, поддерживающем HTML5 и WebGL
Комментарии:
1. Чтобы выполнить это напрямую, можно заменить
writeWebGL(dir=tempdir(), width=700); browseURL(file.path(tempdir(), 'index.html'))
нижнюю строку, указанную @mark .
Ответ №3:
Предложение Пита стоит вознаграждения. Обходной путь wrl на самом деле не нужен, довольно просто сгенерировать xml-файл с помощью sprintf и друзей.
Проблема в скорости: для сравнения, у меня была МРТ желудка с цветовым кодом с 17000 сферами (для вокселей), которая была довольно отзывчивой на моем экране с помощью rgl.
Когда я портировал его на x3dom, система зависла. Работает уменьшенный набор из 450 сфер:
http://www.menne-biomed.de/uni/x3dsample.html
Поддержка браузеров несовместима. Некоторые примеры на странице примеров x3dom лучше всего работают с (хотите верьте, хотите нет) Internet Explorer Flash 11. Проверьте пример динамического освещения.
Мой пример работает, но выглядит плоским в Firefox 7.0.1. Лучшим всегда является Chrome.
Добавлено позже: вот еще один пример:
Содержащийся в нем файл x3d может отображаться даже с встроенной графикой с помощью программы Instant Reality Viewer. Сгенерированный из него HTML-файл иногда загружается, но не может быть повернут.
Комментарии:
1. не по теме, но в целом, если вы строите воксели как воксели, а не сферы, это будет намного быстрее. 🙂
2. Правильно; то же самое верно, если вы используете прямоугольники вместо сфер. Я использовал последнее, потому что, когда я впервые попробовал его со сферами и зеркальными отражениями в rgl, боссу это очень понравилось, поэтому мы оставили его. Спецификации продаются.
3. Я нашел несколько ссылок на воксели < web3d.org/x3d/specifications /… >, но как мне перевести это в x3d/ x3dom?
4. Эти ссылки больше не активны.
5. Жаль, я не сделал резервную копию этих файлов после того, как мне пришлось перейти на другой сервер. Вы могли бы взглянуть на menne-biomed.de/uni/3d и menne-biomed.de/swallow/jswallow3d.html вместо этого.
Ответ №4:
Для максимальной гибкости мне очень повезло с использованием Processing. Изначально он был написан на java, но теперь стабильно портирован на javascript, и более экспериментально на python и даже на несколько других.
http://processingjs.org
http://processing.org
Он использует элемент HTML5 <canvas>
для обработки вашего кода обработки на лету. Вы можете либо сослаться на свой код визуализации в другом файле, либо записать его прямо в свой HTML-файл (напоминает мне Sweave!).
Кроме того, в Интернете есть огромный ресурс примеров с открытым исходным кодом. Например:
Наконец, вот суть, которую я собрал, чтобы продемонстрировать базовую настройку. Просто загрузите processing.js поместите файл в ту же папку, что и gist, и откройте свой браузер.
https://gist.github.com/1295842
Это будет выглядеть так:
Ответ №5:
Пару миллионов лет назад (ОК, 2005) я написал R-код для выгрузки графических примитивов в графическом формате Mathematica (!!), который затем можно было встроить и просмотреть с помощью Java-плагина LiveGraphics3D. Я не пытался использовать его в течение 6 лет, но я мог бы попытаться воскресить его, если бы был интерес.
PS вот результаты help(package="LG3d")
:
get.live.jar Download live.jar Java archive
LG.display Display Live3D graphics in a browser
LG.html.head header and footer files for LiveGraphics HTML
files
LGmobius Draw a 3D mobius strip
LG.open open and close LiveGraphics3D files
LG.plot.profiles Plot likelihood surface profiles using
Live3D
LGtorus Draw a torus in LG graphics system
LGtoruswrap Utility functions for LGtorus
mma.brace Low-level graphics primitives for
LiveGraphics3D
mma.edge change edge style
mma.persp Output a perspective plot to a LiveGraphics3D
file
mma.point Medium-level graphics primitives for
LiveGraphics3D
mma.polygon draw a Mma/LG3d polygon
Ответ №6:
rgl
Теперь в пакете есть rglwidget
функция, которая, вероятно, является самым простым и простым способом создания виджетов графиков rgl.