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.writeWebGLwill 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