writeWebGL(dir = "webGL", filename = file.path(dir, "index.html"),
template = system.file(file.path("WebGL", "template.html"), package = "rgl"),
prefix = "",
snapshot = TRUE, commonParts = TRUE, reuse = NULL,
font = "Arial", width, height)
par3d("windowRect")
dimensions will be used.filename
is returned. If reuse
is not NULL
,
it will have an attribute called "reuse"
which contains a dataframe
with columns "id"
and "prefix"
identifying the prefix used
for objects drawn in this scene. This dataframe can be used as the reuse
argument in subsequent calls to writeWebGL
.Use the template
argument to give the filename of a web page that is to contain the
code for the new scene. It should contain a single line containing paste0("%", prefix, "WebGL%")
, e.g.
%WebGL%
with the default empty prefix. That line will be replaced by the Javascript and other
code necessary to reproduce the current scene. The template may also contain the string "%rglVersion%"
which will be replaced with the current template
is NULL
, the output will simply be written directly
to the main file.
To put more than one scene into a web page, use different values of prefix
for each. The prefix
will be used in identifiers in both Javascript and HTML, so it is safest to start with a letter and
only use alphanumeric characters.
WebGL is a fairly new technology for displaying 3D scenes in browsers. Most current browsers support it
to some extent, though it may not be enabled by default; see
Currently writeWebGL
has a number of known limitations, some of which will be gradually eliminated as
development progresses:
spin3d
) is supported.writeWebGL
will print a warning if this limit is exceeded, but it is up to the user
to break his scene into smaller objects. (And 65535 vertices may not be small enough!)There is some experimental support for modification of the scene by other Javascript code
on the same web page. Currently this is limited to the following. There will be a global variable
created with name
, where
will be replaced by the
prefix
argument to writeWebGL
. Currently this variable will contain properties
corresponding to some of the components returned by par3d
, namely FOV
, zoom
,
userMatrix
and listeners
. Each of these components should be indexed by a subscene
number to obtain the value for that subscene; for example, use
to obtain
the user matrix for subscene 3 as a CanvasMatrix4
object (defined in the
to update the display.
scene3d
saves a copy of a scene to an R variable;
writePLY
, writeOBJ
and writeSTL
write the scene to a file in various other formats.plot3d(rnorm(100), rnorm(100), rnorm(100), type = "s", col = "red")
# This writes a copy into temporary directory 'webGL', and then displays it
filename <- writeWebGL(dir = file.path(tempdir(), "webGL"),
width = 500, reuse = TRUE)
# Display the "reuse" attribute
attr(filename, "reuse")
# Display the scene in a browser
if (interactive())
browseURL(paste0("file://", filename))
Run the code above in your browser using DataLab