NEWS.md
triangulate()
now uses the earcut
library from https://github.com/mapbox/earcut.hpp, which should be faster and more reliable than the previous R implementation.rgl.incrementID()
has been added.axes3d()
.clear3d("all")
, calling bg3d()
on the root subscene, and some cases of pop3d()
involving the background could create a leak of a background object (issue #439). For back compatibility of saved results, these cases still increment the object ID number, but don’t actually create a new object.rglwidget()
displays didn’t support objects with smooth = FALSE
.writePLY()
(issue #425).bbox3d()
objects ignored the xlen
, ylen
and zlen
settings when rendered using rglwidget()
(issue #415).WebGL
vignette started with the mouse mode set to “selecting”.rglwidget()
function gets a new argument fastTransparency
which makes WebGL mimic the rgl
device when drawing transparent objects. The default value is TRUE
unless option rgl.fastTransparency
is set to FALSE
.writeSTL()
now writes endsolid
, which is required by some apps.sprites3d()
now supports plotting different 3D symbols at each location (issue #406).rgl
scenes with role = "img"
.markdown::html_format
, so they no longer require Pandoc (though Pandoc-using output formats like html_document
will still be supported).rgl.postscript()
) updated to version 1.4.2, and blending (transparency) has been enabled in formats that support it.Makevars.ucrt
file has been changed for compatibility with an upcoming change to Windows Rtools. (Pull request #412 submitted by Tomas Kalibera).htmlwidgets::saveWidget()
to fail when run in a Shiny session.text3d()
and mtext3d()
did not pass the cex
argument to plotmath3d()
(pull request #384).polygon3d()
failed when given exactly 3 points (issue #388).snapshot3d()
failed on Windows with some versions of webshot2
(issue #391).dev.off()
using new function safe.dev.off()
.warning()
call reported by CRAN.rglwidget()
. This was especially noticeable for spheres with fov = 0
, but was present in other cases as well (issue #401).textype = "alpha"
was not rendered correctly by rglwidget()
(issue #408).setUserCallbacks()
and related functions failed when the subscene
argument was anything other than the root subscene.grDevices::as.raster()
works, e.g. matrices. (Fixes issue #196.)rglwidget()
. Full support in R Markdown or knitr
requires a knitr
update to version 1.42.12 or newer.String
type, settling on std::string
instead.subdivision3d()
, clipMesh3d()
and related functions now (optionally) record the original faces associated with each new one in a mesh$tags
addition to the output.Makevars.win
file was being produced incorrectly on older Windows versions.rgl.window2user()
did not work correctly when multiple panes were showing. This caused arrow3d()
to fail in some panes (issue #354).selectpoints3d()
had a typo which was revealed by warnings in recent R versions.getShaders()
was broken in 1.1.3.arc3d()
can now handle “arcs” that are straight lines along a radius (issue #357).hover3d()
failed to display default labels in R (issue #362).shade3d()
didn’t handle meshes with a mix of triangles and quads properly when meshColor == "faces"
.subdivision3d()
and related functions now handle colors properly.addNormals()
sometimes gave NaN
values due to rounding error (issue #372).arc3d()
sometimes missed plotting the last segment of the arc (issue #369).R_NO_REMAP
has been defined and header includes have been rearranged to prevent conflict between R internals and C++17 library. (Thanks to Prof. B. D. Ripley and G. Csardi for suggested fixes.)hover3d()
has been added to display “hover hints”: labels next to points when the mouse passes near them."texmode"
has been added to control how textures are applied. The default is "modulate"
, consistent with previous versions. If set to "replace"
, the texture is displayed without any lighting effects or dependence on the original color of the surface.demos
.rgl
now uses the glad
loader which will eventually allow access to newer OpenGL functions in systems that support them.texenvmap = TRUE
material property is now supported in WebGL.as.mesh3d.rglId()
and as.triangles3d.rglId()
methods and the selectpoints3d()
, writeOBJ()
, writePLY()
and writeSTL()
functions did not handle indices in the objects they were processing (issue #293).view3d()
now returns a lowlevel()
result so that it will be handled properly in WebGL vignettes with auto printing.transform3d()
or rotate3d()
changed the orientation of a mesh3d
object with normals, the normals ended up with the wrong sign. (Reported by Stephane Laurent.)scene3d()
(and hence rglwidget()
) did not save the normals for unlit objects. When the objects were also indexed, this prevented proper calculation of front and back. This is fixed, and a warning is issued if normals are not provided when needed.glVersion
before OpenGL was initialized; this resulted in a segfault with the new glad
loader, and may have been the cause of some older crashes as well. This has been fixed.readOBJ()
did not handle comments properly.pch3d()
) caused rendering to fail in rglwidget()
(issue #316).rgl.*
functions have happened. Now deprecated: rgl.abclines
, rgl.bbox
, rgl.bg
, rgl.clear
, rgl.clipplanes
, rgl.close
, rgl.light
, rgl.lines
, rgl.linestrips
, rgl.material
, rgl.open
, rgl.planes
, rgl.points
, rgl.quads
, rgl.select3d
, rgl.set
, rgl.setAxisCallback
, rgl.sprites
, rgl.surface
, rgl.texts
, rgl.triangles
, and rgl.viewpoint
.rgl.*
interface” has been added.elementId2Prefix
, writeWebGL
rgl.material
is deprecated and no longer contains the list of material types in its argument list, rgl.material.names
and rgl.material.readonly
have been added.rgl.par3d.names
and rgl.par3d.readonly
contain lists of properties that may be set or queried in par3d()
.surface3d()
in 0.111.6 were incomplete.flip
has been added to surface3d()
to allow front and back to be switched.setUserCallbacks()
.sprintf
from C/C++ code with calls to snprintf
.surface3d
and rgl.surface
are now more flexible, allowing any of the 3 coordinates to be a vector or matrix as long as at least one is a matrix.material3d
can now specify an id
to query properties for individual objects.rgl.material
is soon to be deprecated and no longer contain the list of material types in its argument list, rgl.material.names
and rgl.material.readonly
have been added.rgl.par3d.names
and rgl.par3d.readonly
contain lists of properties that may be set or queried in par3d()
.rgl.*
call (which is not recommended!) now match the defaults in rgl::r3dDefaults
.surface3d()
to segfault.gl2psGetFileFormat
missed declaring a prototype."blend"
has been added, to allow various kinds of blending for semi-transparent objects (issue #245).Buffer
object now handles reading of sparse accessors.polygon3d()
function now chooses coordinates automatically, as triangulate()
does (PR #262.)mtext3d()
and related functions such as title3d()
now accept language objects other than expressions, as plotmath3d()
always has (issue #273).transform3d()
failed due to missing argument (issue #253).readOBJ()
is now more flexible in what kinds of separators it will accept. (issue #258).adj
that was added in 0.108.3 was not rendered properly in rglwidget()
displays of text. This sometimes caused text to disappear when it was near the far limit of the display (issue #269).Rcmdr
.NULL
if asked to plot zero items, rather than raising an error or crashing (issue #274).axis3d()
with no ticks or labels no longer triggers an error, it now silently returns NULL
.rglwidget()
displays now act on “pointer” events, not just “mouse” events, so they should be more usable on touch screens and tablets (PR #240).embedding = "modify"
for the model matrix has changed. Now the centering step is only done for embedding = "replace"
. In addition, various bugs have been fixed.plot.rglscene()
now ends with the root subscene as current. It also allows specification of open3d()
parameters in a list.MATn
types in Buffer
are returned as arrays with dim c(n, n, count)
.plot3d.rglscene
method now passes ...
to open3d()
.setUserShaders()
function now allows arrays of 4x4 matrices as “uniforms”, and allows additional textures to be specified.sprites3d()
now has the option of rotating = TRUE
, to allow 3D sprites to rotate with the scene.getShaders()
function to get shaders used in WebGL.rgl
is running within reprex::reprex()
and if so arranges that a screenshot will be included in the output.rglwidget()
, rather than constructing them on the fly. This incompatibly affects the use of lights and clipping planes with user shaders: their data is now stored in arrays rather than multiple numbered variables.pkgdown
2.0.0 has been released, a number of internal workarounds to support the development version have been removed.as.mesh3d()
methods for "rglsubscene"
and "rglscene"
.open3d()
now handles useNULL
and silent
arguments passed in params
.playwidget()
may now include a component specifying HTML dependencies.rglwidgetClass.readAccessor()
method to let other code use the buffering....
argument: cylinder3d()
, and getBoundary3d()
.webshot2
is on CRAN, instructions for installing it from Github have been removed.webshot2
snapshots are very slow, so the default for the webshot
argument to snapshot3d()
now depends on the RGL_USE_WEBSHOT
environment variable, using TRUE
if it is unset. (Reported by Prof. B. D. Ripley.)snapshot3d(webshot = TRUE)
now issues a warning and reverts to using rgl.snapshot()
.akima
package is no longer suggested.as.mesh3d.rglobject()
didn’t handle objects with indices properly.pop3d(tag = x)
did not always find the objects with tag == x
if they were not in the current subscene.front
and back
in rgl.material
and material3d
are now "filled"
, as documented in some places.fog
setting wasn’t handled properly by bg3d()
.col
is accepted as a synonym for color
in material3d()
and rgl.material()
.planes3d()
objects were not displayed consistently in rgl
windows and WebGL displays, because the bounding boxes were not computed consistently (issue #169).selectpoints3d(closest = TRUE)
selected too many points when multiple objects were in the scene.knitr
and rmarkdown
, blank plots could be shown when par3d(skipRedraw=TRUE)
was set (issue #188).sprites3d()
weren’t lit correctly in WebGL (issue #189)."pretty"
got lost when scenes were redrawn.snapshot3d()
results (issue #197).plotmath3d()
.rglMouse()
did not set the default value of the drop-down selector properly (issue #213).merge.mesh3d()
, used by filledContour3d()
, didn’t handle colors properly (issue #212).bg3d(sphere = TRUE)
has been fixed (issue #207).rgl
scenes didn’t appear (reported by Dieter Menne.) A workaround has been added.rglwidget()
, axis labels were not always displayed, and did not move with solid bounding box decorations properly (issue #206).lines3d()
using both missing values and transparency did not draw properly (issue #234, originally reported by Gaspar Jekely).rglShared()
example failed when crosstalk
was uninstalled.getBoundary3d()
function to extract the boundary edges of a mesh.tag
, a string associated with each object. The value is reported by ids3d(tags = TRUE)
and may be used to select objects in most functions that use ids, but otherwise is largely ignored by rgl
. The tagged3d()
function returns information on tags.indices
parameter, similar to the indices in mesh3d
objects.Buffer
object, based on glTF design, for holding binary data for rglwidget()
.text3d()
’s adj
parameter.adj
, pos
and offset
to sprites3d()
.pos
values of 0
(at specified location), 5
(in front of it), and 6
(behind it) in text3d()
, sprites3d()
and plotmath3d()
.crosstalk
is now a Suggested package, rather than a required one.Makevars.ucrt
file has been modified with contributions from Tomas Kalibera to work with his winutf8
build of R.bgplot3d()
no longer pauses for each page when running examples.deldir
version 1.0-2 is incompatible with rgl
. Added the checkDeldir()
function to avoid running it.shade3d()
treated texture coordinates like colors, and duplicated the first one for the whole face when meshColor = "faces"
was chosen. Instead, they are now treated like vertex coordinates. (Reported by Michael Sumner in issue #145).asHomogeneous()
, asEuclidean()
etc. more consistent.as.rglscene()
generic has been added, though no methods are defined in this package.downlit
0.4.0 has been released with support for rgl
, so instructions for installing the devel version have been removed.--static
flag to configure script for FreeType installation. (Suggestion of Simon Urbanek and Prof. Brian Ripley.)shade3d()
, wire3d()
and dots3d()
overrode "front"
and "back"
material settings in mesh objects.rglwidget()
handling of bounding box decorations had several bugs.rgl
could not find routines in the DLL on some Windows installs (Issue 148.)expect_known_scene()
function to work with testthat
.testthat
tests.par3d("mouseMode")
, corresponding to actions to take when no button is pressed.setUserCallbacks()
function to allow user-specified mouse callbacks in WebGL code.bboxdeco
objects.margin
and floating
, with objects that move as the bounding box changes. See ?mtext3d
for details.mtext3d()
argument order has changed.setAxisCallbacks()
function to allow user-specified axis drawing routines.as.tmesh3d()
function.shiny
and manipulateWidget
packages have been changed from imports that are always loaded to suggested packages that will only be loaded if needed. This will reduce the “footprint” of rgl
for users who don’t use them.par3d("useFreeType")
and the result is saved.knitr
has now been removed.RGL_DEBUGGING
environment variable has changed: now it must look like TRUE
to trigger Javascript debugging mode.webshot = TRUE
has been added to movie3d
(issue #113).WM_PAINT
handler should be more tolerant of code called while painting.as.mesh3d.default()
can create segments. (Contributed by Michael Sumner.)compare_proxy.mesh3d()
has been modified to be compatible with both current and upcoming versions of waldo
.rgl
was loaded. The workaround is now skipped when RStudio is detected. Use options(startQuartz = TRUE)
in RStudio before loading rgl
to run it, or options(startQuartz = FALSE)
to suppress it.rmarkdown
documents were produced at the wrong size.example(playwidget)
, issue #102)testthat
errors in other files accidentally introduced a new error in coloring meshes in rgl
: now fixed.readOBJ()
was broken by the 0.106.x changes.merge.mesh3d()
failed for meshes containing points or segments.pkgdown
compatibility have been added. See vignette("pkgdown")
.drape3d()
, to “drape” objects across a mesh. (Contributed by George Helffrich.)shadow3d()
to project one mesh onto another.facing3d()
to subset a mesh to parts facing in a particular direction.as.mesh3d.default()
have changed accordingly, and a new function mesh3d()
has been added.inst/NEWS
file so it is visible here.asHomogeneous2()
and asEuclidean2()
to work directly with 3 x n
and 4 x n
matrices.rglExtrafonts()
to load additional fonts for use with FreeType rendering. Requires the extrafont
package.rgl.*
functions.filledContour3d()
.point_antialias = TRUE
now gives round points in rglwidget()
displays.rglwidget()
is no longer used.rgl
windows are grouped, based on code by Ivan Krylov.filledContour3d()
now accepts levels in decreasing order.mergeVertices()
and as.mesh3d.rglId()
have been improved.r3dDefaults$useFreeType
is now set to FALSE
on Windows, so that system fonts will be used by default.family = "symbol"
has never really worked, and is no longer recommended.compare_proxy
method in case a recent testthat
is being used.rglwidget()
once again adapt to the viewer window in RStudio (issue #74).snapshot3d()
(reported by Tony Hirst: https://github.com/dmurdoch/rgl/issues/21 .)rgl
and the quartz()
device caused a segfault (see issue #27). Added workaround. (reported by Rich Heiberger, https://github.com/dmurdoch/rgl/issues/27).lwd > 1
) line segments in rglwidget()
.Makevars
files caused builds using a parallel make to fail.rglwidget()
, background images could cause other parts of the display to disappear.knitr
documents will now be simplified in versions of knitr
that incorporate its PR#1892.webshot
argument to snapshot3d()
, to use the webshot2
package (currently only available from Github; see ?snapshot3d
for details) to produce snapshots even on headless systems.rwinlib
during the build. (Contributed by Jeroen Ooms.)shinySetPar3d()
now accepts a list, as returned in input$par3d
by shinyGetPar3d()
, as input. (Suggestion of Yohann Demont.)filledContour3d()
changed in R versions previous to 3.6.0, as hcl.colors()
didn’t exist in those versions. (Reported by Daniel Baston.)rgl
will now work in R versions from 3.3.0 up.snapshot3d()
now defaults to writing to a temporary file instead of failing if no filename is given.snapshot3d()
and rgl.snapshot()
now return the output filename invisibly.rglwidget()
no longer tries to include both a snapshot and a WebGL scene: it can only do one or the other.inst/useNULL
, so options(rgl.useNULL=TRUE)
before loading rgl
will cause it to not use X11 at all.drat
repository to hold the unreleased webshot2
package.thigmophobe3d()
, mergeVertices()
and as.mesh3d.default()
have been fixed.--disable-opengl
configure option to run entirely without OpenGL (to support Apple M1 machines without GLX, and others which don’t have X11 or OpenGL devel files installed).mathjaxr
, which caused issues on Debian."shinyMouse"
demo.open3d()
now has class "rglOpen3d"
, and knitr
will use this during auto-plotting.rglwidget()
that caused it to fail to display text if too many strings were in the same object. (Reported by Yohann Demont.)lintr
.addNormals.mesh3d()
method, added angleWeighted
argument, defaulting to TRUE
.rglwidget()
displays of transparent spheres.clipObj3d()
, contourLines3d()
and filledContour3d()
functions.clipMesh3d()
function to make it more consistent with the above three functions. The main incompatibility with the version in 0.100.26 is that only vertex coordinates are now passed to the clipping function.merge()
method for "mesh3d"
objects, and use it in filledContour3d()
.writeWebGL()
style controls.knitr
hooks, so support for rgl
should be very similar to support for standard graphics output.rglwidget()
. It has also been split into multiple files which are joined with “minification” on installation.makeDependency()
to support Javascript library in source.r3dDefaults
now sets material$fog
to TRUE
, and bg$fog
to "none"
. (In rgl
, fog must be set both in the background and in the object to display.) The formula used in WebGL is slightly different than in the internal R display.)getr3dDefaults()
now has two optional arguments to specify what to retrieve, e.g. getr3dDefaults("material", "color")
to retrieve r3dDefaults$material$color
, with NULL if either part is missing.fogScale
parameter to bg3d()
and rgl.bg()
to allow increased or decreased fog.fastTransparency
parameter to spheres3d()
and rgl.spheres()
, to allow them to be drawn more quickly when transparency is used."mesh3d"
methods for shade3d()
, wire3d()
, and dots3d()
have been rewritten to share code, allowing meshes to have different front and back material properties.cur3d()
, set3d()
, close3d()
and ids3d()
have been added. Generally, users should use these rather than rgl.cur()
, rgl.set()
, rgl.close()
and rgl.ids()
.snapshot3d()
now has optional width and height parameters for the saved snapshot.rglwidget()
displays.meshColor
variable."snapshot"
knitr
option to use when autoprinting.snapshot3d(width = NULL, height = NULL)
.as.mesh3d.rglobject()
method.clip_to_density
argument to plot3d.lm()
method.rglwidget()
now saves a copy of the original scene, so it can be reconstructed or modified later.valgrind
, and problems seen on systems with no functional Asymptote or Pandoc.rgl
widget is included in a Gitbook
has been fixed.writeASY()
for compatibility with Asymptote 2.65. (Reported by Pavel Stříž.)pop3d()
has been modified slightly so that it no longer opens a new window if none is already presentsetGraphicsDelay()
function to work around bug in macOS Catalina XQuartz."depth_mask"
material property was being ignored in rglwidget()
.rgl.snapshot()
and rgl.postscript()
could crash if a zero length filename was passed to them.rgl.attrib(id, "normals")
so the normals will be returned whether or not the object is lit. (Suggestion of Tyler Morgan-Wall)rglwidget()
are now independent of set.seed()
, using code borrowed from Shiny for our own private RNG.getr3dDefaults()
now gets values from rgl::r3dDefaults
if they are not present in the user’s r3dDefaults
list.bgplot3d()
now uses the background colour from argument bg.color
(defaulting to the background color from getr3dDefaults()
) rather than always choosing white.plot3d.rglscene()
that caused restored subscenes to ignore the mouse.next3d()
no longer messes up when a user changes active subscenes.rgl
code.?rgl.init
help topic to describe initialization issues.par3d("windowRect")
.demo(stereo)
now uses plot.raster()
rather than image()
.tkrgl
package have been moved into rgl
.rgl
null device.anaglyph()
function in the "stereo"
demo now prints information about failed pixel reads.inst/slowTests
so that running them is optional (and the CRAN checks will go faster).readOBJ()
that affected reading texture coordinates.rgl.pixels()
, rgl.snapshot()
and snapshot3d()
now read from the back buffer, which should increase reliability.windowRect
: viewport
was not always updated.pkg-config
but no freetype2.bg3d()
and bgplot3d()
to wipe out fog setting.writeASY()
to work with a more recent version of Asymptote. Use ver244 = TRUE
for the older version.plot3d(..., type = "s", add = TRUE)
chose a bad default radius for the spheres – possibly even zero.planes3d()
could fail to draw the plane if it intersected a vertex of the bounding box of the scene.rglMouse()
did not automatically link to an rglwidget()
.meshColor
as an argument to tmesh3d()
, qmesh3d()
and dot3d()
; changed default to no longer give warning if meshColor
is not specified.all.equal()
method for "mesh3d"
objects, so that changes caused by the above are ignored.tri_to_keep
argument to as.mesh3d.ashape3d()
for compatibility with conflicting method from nat
package version 1.8.11.std::bind2nd
and std::ptr_fun
as requested by CRAN. Other changes to remove compile warnings also made.clipMesh3d()
to allow smooth clipping of mesh objectsplot3d.lm()
method handle a larger variety of models, by allowing for curved surfaces.as.mesh3d.default()
method to convert triangles or quads to a "mesh3d"
object.as.triangles3d()
generic with methods to convert "mesh3d"
objects into matrices representing triangles.as.triangles3d.rglId()
and as.mesh3d.rglId()
methods to convert displayed objects to usable data.open3d()
now signals an error if unnamed parameters are usedtoggleWidget()
now makes it easier to initialize the scene with some objects hidden.thigmophobe3d()
to try to keep up with changes in plotrix::thigmophobe()
.rgl.postscript()
from writing files to current directoryshinyGetPar3d()
and shinySetPar3d()
functions for Shiny interaction.thigmophobe3d()
function to place labels away from other points using plotrix::thigmophobe()
.arc3d()
function to draw spherical arcs."polygon_offset"
material property, to allow lines to be drawn on surfaces.plot3d()
, persp3d()
and as.mesh3d()
methods for "triSht"
and "tri"
classes (produced by interp
and tripack
packages.)plot3d()
methods for objects of class "formula"
and "lm"
and a persp3d()
method for objects of class "formula"
have been added. (A bug in the implementation of as.mesh3d.deldir()
was found and fixed during the latter addition.)as.mesh3d()
, plot3d()
and persp3d()
methods for "ashape3d"
objects from the alphashape3d
package have been added.par3d("userProjection")
, to allow the user to supply a change to the projection after all other display calculations have been done.par3d("activeSubscene")
, to allow mouse callback functions to determine which subscene was clicked."highp"
support to fragment shader in rglwidget()
.text3d()
and related functions: dropped deprecated argument justify
, added pos
and offset
like base graphics text()
."mesh3d"
objects: added print methods, added meshColor
argument to wire3d()
and shade3d()
to control how colors are interpreted, added "rgl.meshColorWarning"
option to control warnings about these changes.plot3d.mesh3d()
method now has the same default for aspect
as the default method.pch3d()
now allows separate color
and bg
specifications for each point. In addition, the default for the "lit"
material property is now FALSE
, so by default filled symbols will match the requested colour regardless of lighting.manipulateWidget::combineWidgets
function when putting multiple objects into a pipe.rglwidget()
.playwidget()
is no longer an S3 generic function.pkg-config
(code contributed by Dirk Eddelbuettel.)playwidget()
has been initialized but it can’t find the rglwidget()
that it is controlling (likely due to a typo somewhere), it now throws an alert message.persp3d.deldir()
method didn’t display labels properly.rgl
messed up the S3 methods system. (Reported by Gregory Jefferis.)rgl.bbox()
was returning 0/1 instead of the id of the axes.pch3d()
was failing in rglwidget()
for some shapes. (Reported by Luca Scrucca.)par3d(mouseMode = "none")
was not implemented properly, so appeared to be a no-op.rgl
to crash.rchk
have been fixed.rgl.*
functions) were not handled properly. (Reported by Ty Tuff.)crosstalk
package. See ?rglShared
and vignette("WebGL")
for details.rglMouse()
function to allow the mouse mode to be changed in a WebGL display.rgl.postscript()
) updated to version 1.4.0.rglwidget()
to fail to work in a flexdashboard()
display.ioslides
, shiny
, etc.) in scene when rglwidget()
is called.html_document
, ioslides_presentation
and slidy_presentation
.useSubscene3d()
now returns the id of the previously active subscene, to make temporary changes more convenient.renderRglwidget()
and renderPlaywidget()
now have an optional argument outputArgs
for use in dynamic R Markdown documents.rglwidget()
now warns if an object has too many vertices."centers"
attribute now refers to the individual facets of spheres, rather than the whole sphere. Use "vertices"
for that.rglwidgetClass
in Javascript.vertexSetter()
can now set plane parameters.platform.cpp
so it works with __STRICT_ANSI__
defined.rglwidget()
code using a vertex shader.ageControl()
or vertexControl()
be duplicated in the original has been removed.par3dinterp()
did not always choose the best direction for interpolation of the userMatrix
.toggleWidget()
function didn’t work properly in Shiny.readOBJ()
to fail; added support for reading normals and texture coordinates.axes3d("bbox")
didn’t send parameters to bbox3d()
.snapshot3d()
and writeASY()
so that they don’t change the working directory.add = FALSE
argument to persp3d.deldir()
."shiny.tag"
objects are now supported as inputs to playwidget()
, so that rglwidget()
values can be wrapped in htmltools::div()
to set their style.figWidth()
and figHeight()
functions for sizing rgl
plots in R Markdown documents.layout3d()
handled multi-row cells incorrectly. (Reported by Felix Carbonell.)subsetControl()
, and added toggleWidget()
texture
argument to persp3d.function()
to texcoords
for consistency with other functions, and to avoid a collision with the "texture"
material property.plotmath3d()
function, and set text3d()
to use it when necessary.fixedSize
argument to rgl.sprites()
and related functions.material3d()
now silently ignores attempts to set read-only properties.setUserShaders()
for user-specified shaders (currently for WebGL only).demo("rglExamples")
to display all the examples in the rgl
help in a collection of web pages. This showed up a number of small bugs, which have been fixed.movie3d()
now optionally tries the R magick
package first, then the external ImageMagick v7 command magick
before trying convert
. (The external change suggested by Earl F. Glynn.)par3d()
reports on the version of OpenGL that it sees (as component "glVersion"
).rglwidget()
.addNormals()
gave an error if the mesh it was working with had degenerate triangles or quads. (Reported by Rolf Turner and Graham Griffiths.)playwidget()
s.pch3d()
(reported by Gina Joue).as.mesh3d()
and plot3d.deldir()
and persp3d.deldir()
methods to allow plotting of surfaces defined by irregular collections of points.rglToLattice()
and rglToBase()
functions to compute Euler angles for the lattice::wireframe()
, lattice::cloud()
, and base graphics persp()
functions.arrow3d()
(based on the function of the same name in the heplots
package).pch3d()
to give an approximation to plotting symbols using pch=<number>
in base graphics.spin3d()
, par3dinterp()
, play3d()
and movie3d()
.writeASY()
for output in Asymptote format, which will allow inclusion in PDF files.rgl.attrib.info()
to display information about object attributes.rglwidget
code back into rgl
."rglLowlevel"
or "rglHighlevel"
(using the new lowlevel()
or highlevel()
functions) to indicate that a low- or high-level plotting function has been called. If the new option "rgl.printRglwidget"
is TRUE
, printing objects of either class will trigger automatic printing of the rgl
scene using rglwidget()
.scene3d()
to allow them to be used in rglwidget()
.rgl.postscript(fmt = "tex")
generated code. (Thanks to Uwe Ligges for the problem report.)cylinder3d()
now defaults to a rotation minimizing local frame.FOV = 0
).jsonlite
so that the new faster matrix code will be used.subdivision3d()
have been exported for use on their own.rglwidget()
code now supports textures on spheres.rglwidget()
code now works to make more careful use of this finite resource, so that large numbers of rgl
scenes can be present on a single web page without exhausting it.rgl.pixels()
to attempt to avoid segfault on OSX. (Thanks to Greg Jefferis for testing and workaround.)aglrgl.so
) has been dropped; it appears not to work in Yosemite and El Capitan.rglwidget
package (though the functions in rgl
still work).rgl.init()
fails, continue with the NULL
device (with warnings).scene3d()
now returns the normals and offsets of “planes” objects, as with “clipplanes” objects. It still returns the triangles from embedding the planes in the most recent subscene.scene3d()
.show2d()
to allow a 2d plot on a quadrilateral in a scene.matrixSetter()
function to allow multiple controls to modify one matrix.vertexSetter()
function to allow easier access to vertex attributes."rgl.keepopen"
; replaced it with "rgl.newwindow"
.accumulate
argument to the subset WebGL controls.nticks
argument to bbox3d()
was never used and has been removed. Use xlen
, ylen
or zlen
.js::jshints()
function to clean up the WebGL Javascript code.values = NULL
in propertySetter()
and vertexSetter()
to allow code to directly set values.scene3d()
.rgl.attrib()
and are stored by scene3d()
.rgl.bbox()
(and hence bbox3d()
, decorate3d()
, plot3d()
, etc.) did not return the correct id for the bounding box decoration.xlen
etc. to zero in bbox3d()
or rgl.bbox()
now (correctly) suppresses tick marks. (Reported by Philipp Angerer.)normals
or texcoords
in both a "mesh3d"
object and a call to shade3d()
to display it caused an error; now the shade3d()
specified value has priority if override = TRUE
(the default).persp3d()
and plot3d()
did not work properly with a shared mouse. (Reported by Marian Talbert.)knitr
to fail to initialize properly. This required adding the setupKnitr()
function, which should be called at the start of each vignette. It is not called automatically.rgl
to fail to compile when libfreetype
2.6 was linked.writePLY()
(reported by Kurt Hornik).subsetSlider()
, subsetSetter()
, clipplaneSlider()
, propertySlider()
, ageSetter()
, propertySetter()
, par3dinterpSetter()
and toggleButton()
functions to output HTML/Javascript controls for WebGL.hook_rgl()
and hook_webgl()
functions, based on the knitr
functions.plot3d()
and persp3d()
.GramSchmidt()
function (request of Remko Duursma)readOBJ()
, with a very limited ability to read OBJ shapefiles.writeWebGL()
, the string %prefix%
will be replaced in it by the prefix argument.writeWebGL()
now outputs a Javascript global variable named "<prefix>rgl"
of class "rglClass"
that allows access to many of the scene internals. (Inspired by patch submitted by Jeff Allen.)rgl.getMouseCallbacks()
and rgl.getWheelCallback()
, and may be included in WebGL output.writeWebGL()
now outputs information on object ids to allow them to be re-used in multiple figures on the same page. See the reuse
parameter and attribute of the result."canvas"
element in writeWebGL()
output to "rglWebGL"
.rgl.snapshot()
now evaluates the top
argument after filename
and fmt
, so windows created when those are evaluated don’t overlay the rgl
window. (Suggestion of Keith Jewell.)writeWebGL()
now includes an argument commonParts
, to allow omission of common code in multi-figure displays.template
is NULL
in writeWebGL()
, no template file is used.persp.function()
method is now smarter about setting default axis labels.triangulate()
now supports polygons expressed with 3 coordinates (though they are still assumed to be planar).par3d()
now includes "listeners"
, a list of subscenes that respond to mouse actions in the current subscene.abclines3d()
that caused it to skip lines that passed through the corners of the bounding box. (Reported by Sven Laur.)NULL
device did not handle changes to par3d("windowRect")
properly.ignoreExtent = TRUE
were not plotted.writeWebGL()
did not display the bboxdeco
properly when working in a subscene.rgl.snapshot()
now works with the NULL
device (but produces a black snapshot). This allows testing with RGL_USE_NULL
.bgplot3d()
and legend3d()
functions.par3d("modelMatrix")
from 0.94. This affects rgl.projection()
as well.NULL
device now does not make any spurious OpenGL calls.Added function methods for persp3d()
and plot3d()
, to allow surfaces to be plotted just by specifying the function. ## Bug fixes
Fixed a bug introduced in 0.94 that made user callbacks crash R. (Reported by Dave Hadka.)
Fixed a bug exposed in 0.94 (but really introduced in 0.93.952) that caused writeWebGL()
to fail when a NULL
device was active.
Fixed a bug introduced in 0.94 with writing 3D sprite objects.
Fixed a bug computing the bounding box of an embedded subscene.
par3d()
or rgl.setWheelCallback()
.pop3d()
and rgl.pop()
: the type is now ignored if id
is non-zero.par3d("modelMatrix")
no longer includes the observer translationpar3d()
, par3dinterp()
, and spin3d()
functions now have arguments dev and subscene to specify where they apply.CanvasMatrix.js
(used by writeWebGL()
) at the request of the Debian administrators.rgl.material()
(for textures), rgl.postscript()
and rgl.snapshot()
now call normalizePath()
on filenames, so tilde expansion should be supported.surface3d()
and persp3d()
. (Problem found by Graham Griffiths using polar coordinates; all r=0
points were at the same location.)rgl.attrib()
will return them even if they were calculated by rgl
. * scene3d()
now records light settings.par3d()
could generate an error if an unnamed list was passed in.material3d()
lost settings for textureslocator()
input.rgl.attrib()
showed up in writeWebGL()
. (Reported by Brian Ripley.)clipplanes3d()
function to implement clip planes. (Still only partially implemented.)rgl
C++ functions and classes are now in namespace “rgl”. Others have prefix rgl_, with the exception of gl2ps functions, which all have that prefix, and FTGL functions, which generally have an FT prefix.rgl
DLL are now registered within the DLL, and on systems that support it, all entry points other than the registration function are hidden.writeWebGL()
and the other write methods did not handle material information properly after 0.93.975.scene3d()
function now records complete information about the bounding box and the background.rgl
declares most of its C++ objects in the global namespace. Recently this has caused clashes with the igraph
package, which does the same, and which also has a Shape class. As a temporary workaround the rgl
class has been renamed to "rglShape"
. A full rgl
namespace will eventually be added, with only the API functions left in the global namespace.rgl.texts()
without a window failed because it queried the window before opening it.writeWebGL()
now forces the position attribute to location 0, a recommended optimization strategy. The color attribute is forced to location 1..check3d()
and rgl.select()
have been exported, as they were used by the car package.rgl
now prints a warning when a requested font is unavailable and the default font is substituted.writePLY()
had errors writing points and lines.triangulate()
, polygon3d()
, extrude3d()
and turn3d()
for display of shapes based on two-dimensional polygons or curves.rgl.useNULL()
.rgl.cur()
; added function rgl.dev.list()
to list all open devices.rgl.useNULL()
, and don’t run invisible animations.writeOBJ()
(issue 4732, reported by Alejandro Baranek).identify3d()
functionrgl
version into the WebGL fileCHECKGLERROR
, so that setting USE_GLGETERROR
to 1 in R.h
will enable detailed checkingwriteOBJ()
(reported by Matthias Zeeman), writePLY()
and writeSTL()
.aspect3d()
(called by plot3d()
) caused the scene to be redrawn, even if par3d("skipRedraw")
was TRUE
.addNormals.mesh3d()
failed on objects when the matrices of triangles or quadrilaterals had zero columns.rotate3d.mesh3d()
did not transform normals properlywriteWebGL()
function produced fragment shaders that would not work in some browsers (e.g. Firefox and Chrome with the ANGLE WebGL engine).rgl.material()
before any rendering caused a crash on OSX. (Reported by Dan Tenenbaum.)writeWebGL()
handles lighting properly. Based on code contributed by Alexander Senger.writeWebGL()
did not handle snapshot=FALSE
properly. (Reported by Yihui Xie.)writeWebGL()
function, to allow scenes to be viewed in a web browser.cylinder3d()
.cylinder3d()
objects.writeWebGL()
.rgl.light()
and light3d()
did not return the light ID value.readSTL()
and writeSTL()
functionswritePLY()
and writeOBJ()
functionsscene3d()
functionselectpoints3d()
function to select points from the scene.expand
argument to decorate3d()
and axes3d()
base
argument to spin3d()
resultcylinder3d()
res_name="rgl"
and res_class="R_x11"
to the WM_CLASS
property of X11 windows. (Contributed by Philip Johnson.)setHook()
changesrgl
window now handles ESC
key presses. During selection and play3d()
they abort the process; otherwise they are ignored.R_pretty0()
function from R sources to avoid warning.writeWebGL()
did not render semi-transparent surfaces properly. (Reported by Robert Esswein.)Sweave()
support through the rgl.Sweave()
driver and the Sweave.snapshot()
function.rgl.abclines()
, rgl.planes()
, abclines3d()
and planes3d()
to draw lines and planes intersecting with the bounding box.rgl.attrib.count()
and rgl.attrib()
(and internal function rgl.getmaterial()
) added to allow objects in the scene to be examined.configure.win
for bi-arch compatibility. Windows installers can set HAVE_PNG
to a non-empty value, and rgl
will look for the libpng files in the default LOCAL_SOFT
location when installing."depth_mask"
and "depth_test"
material properties, to allow control over how objects are obscured by each other.plot3d()
was modified to use this instead of manually setting axis locations and using box3d()
to draw a box, allowing resizable labelled axes.rglmath.h
that were causing problems in an old version of gcc on Solaris.rgl.postscript()
now adjusts the size of text following the cex
setting. The font
and family
settings are still ignored.src/osx
.options(rgl.antialias=0)
to disable it.divide.mesh3d()
in handling normals.rgl.ids()
did not return all object ids as documented.--merge-multiarch
on Windowsrgl.texts()
: zero-length texts argument caused crash. (Reported by Michael Friendly.)rglmath.h
"alpha"
component of the material properties to be messed up. (Bug #809)Xvfb
errors in rgl.pixels()
examples and demo.keepVars
argument to cylinder3d()
, for debugging or special effects.BugReports
field to DESCRIPTION
.FOV
to be set to 0, for an orthogonal projection.seq(along=...)
to seq_along(...)
.cylinder3d()
.addNormals()
generic, to add normals for smooth surface rendering.cylinder3d()
function, to make cylindrical or “tube” plots.math.h
, for compatibility with Sun compilers (contributed by Brian Ripley).shade3d()
, wire3d()
and points3d()
methods.open3d()
.rgl.pixels()
example for weird displays.demo(stereo)
to add sync in X11: X windows seemed to grab images before they were redrawn.rgl.pixels()
to read the generated image, and demo("stereo")
to illustrate its use."point_antialias"
, which causes points to be drawn as smooth circles, and "line_antialias"
, which causes lines to be antialiased."lwd"
for line width; "size"
now applies only to points.movie3d()
gains a “type” argument to set the output type, and the convert
argument is more flexible.rgl.snapshot()
gives more informative error messages when libpng is not available.axis3d()
now uses format()
rather than as.character()
to give nicer looking labels.warning()
to report messages, rather than popups or REprintf
.open3d()
: “…” was being ignored.qmesh3d()
: homogeneous=FALSE
coordinates were not handled properly.?rgl
example to display this file.rglFonts()
was being set at install time, but it should be set at load time.mouseCallbacks()
demo, to show R implementations of standard mouse handlers, multiple connected windows, stereo view, etc.rgl.set()
, to allow temporary changes to focus without changing window labels.par3dinterp()
.rgl.pop()
could cause corruption when multiple windows were open."windowRect"
to par3d()
parameters to allow window size to be controlled from R.par3d("windowRect")
returned garbage if there was no window open.persp3d()
and plot3d()
sometimes miscalculated ranges involving NAs.select3d()
and rgl.select()
produced a very inefficient test function.rgl.texts()
and text3d()
can now handle font and size specifications using the FreeType library on any platform, or GDI on Windows.adj
is supported both horizontally and vertically in drawing text.mouseMatrix
that caused disappearing views.rgl.pop()
was very slow when given a long list of ids.play3d()
, movie3d()
, par3dinterp()
, and spin3d()
functions, with flag demorgl.setMouseCallbacks()
to allow user actionsmaterial3d()
qmesh
objects, but (at present) subdivision3d()
removes themmaterial3d()
now preserves the values of unspecified parameters (as documented, but not previously functioning)clear3d()
can now reset material properties to the defaults, and open3d()
does this.rgl.surface()
, surface3d()
and persp3d()
, by specifying matrices for x and y coordinatesexample(persp3d)
.rgl
help topic.rgl.postscript()
in Linux, added text support to itsnapshot3d()
wasn’t being exported, and snapshots were from the back bufferpersp3d()
partially ignored add=TRUE
plot3d.qmesh3d()
did not return resultpar3d("scale")
type="s"
to plot3d()
to draw spheresList
and ListIterator
internallyrgl.viewpoint()
default to be compatible with r3dDefaults
rgl.pop()
; added rgl.ids()
to report on them."ignoreExtent"
option to par3d()
: objects plotted when this is true are ignored when calculating the bounding boxaxis3d()
, axes3d()
, box3d()
, mtext3d()
, title3d()
functions from djmrgl
for annotating plots.plot3d()
high level plot functionmaterial3d()
, which can both set and query material properties; changed most *3d
functions so they leave material invariant across calls.open3d()
to set background and material defaultsaspect3d()
to control the aspect ratio of the bounding box.xAxis
, yAxis
and zAxis
mouse modes, set zAxis
as r3d
default.persp3d()
functionREprintf
in X11 and OSXrgl_init()
failedviewport
argument in user2window()
and window2user()
callsrgl_init()
call fails, the package will still load with a warning (but most function calls will result in errors).par3d("scale")
to handle aspect3d()
operations internally.ellipse3d()
generic and methods for drawing confidence ellipsoidsdecorate3d()
to draw all the decorations, plot3d.qmesh3d()
method.rgl.primitive()
now does sanity checks on inputs"all"
and "viewpoint"
to rgl.clear()
and clear3d()
xyz.coords()
in all functions taking x, y, z coordinates, allowing matrix or dataframe arguments (among others)par3d(skipRedraw=TRUE)
to allow drawing to be done without being renderedlinestrip
rgl.bringtotop()
, added stay option (win32)djmrgl
rgl.user2window()
and rgl.window2user()
functionsrgl.close()
, rgl.quit()
crashed on X11 occasionally.rgl.surface()
to allow surface over any coordinate plane.r3dDefaults
variable to allow user to set defaultszlib
and libpng
sourcesWin32GUIFactory
(removes warning).C()
calls using PACKAGE="rgl"
Maintainer.mk
using correct zlib
versionlibrary.dynam.unload()
.First.lib()
lpng
and zlib
from source treezlib
and lpng
on win32demo(rgl)
rgl/src/Makefile
LDFLAGS
for OpenGLU
libraryrgl.sprites()
‘radius’ bug fixedAutoDestroy
and used through Ref
’sfree
’d when they become unused e.g. texture objects are created.setversion.sh
project.mk
, win32.mk
and x11.mk
in src/build
changed now a single variable MODS will extend.rgl.dll
now contains an R compliant Resource information generated by R perl
scriptrgl_quit()
and lib_quit()
multiple times win32lib.cpp
: added dllmain
that calls rgl_quit()
on process exitdevcpp
IDER CMD check
runs through with 2 WARNINGS (according to latex
, and codoc
)x11gui
: glXChooseVisual()
part fixedrglview.h
man/maintainer.Rd
maintainer informationrgl.quads()
: enum
id was broken, fixed (“quads” -> “quadrangles”)inst/
directorywin32/vc
: fixed fpu control word precision to remain on 64 bit links with fp10.obj
rgl_init()
, rgl_quit()
: explicit client initializationsetup.bat
: build setup for windowsgui
environmentsystem.file( <subpath>, package="rgl" )
in examples to retrieve texture filesenum
typesrgl.sprites()
autoUpdate
, modified win32 main loop, on hide, autoUpdate
disabled, on show enabled