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.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).Biarch to DESCRIPTION so both architectures are built on Windows.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").Xvfb.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.uname still work. (Suggestion of Settra Khemri.)thigmophobe3d() to try to keep up with changes in plotrix::thigmophobe().rgl.postscript() from writing files to current directoryvalgrindshinyGetPar3d() 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.NULL device was not removed from the device list when it was closed. (Reported by Henrik Bengtsson.)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 namespace on some OSX compiles.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.rgl was on the search path; now it may be imported but not attached. Similarly, r3dDefaults need not be on the search path.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.)/usr/X11/bin at the head of the path when looking for freetype-configwriteWebGL() function, to allow scenes to be viewed in a web browser.rgl.save.texture(): textures are not saveable!cylinder3d().cylinder3d() objects.writeWebGL().rgl.light() and light3d() did not return the light ID value.configure.win that was causing problems on the CRAN WinBuilder systemreadSTL() 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.)rgl.save.texture() to get texture from an object.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 WindowsR_ARCH* macros to configure.win for Win64 compatibilityrgl.texts(): zero-length texts argument caused crash. (Reported by Michael Friendly.)rglmath.hstartTime argument to play3d() and movie3d().configure.ac as suggested by Jens Elkner."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.material3d("color") bug introduced in 0.82."mesh3d" and "shapelist3d"; "qmesh3d" is only kept for back compatibility.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.assert() macro in place to avoid crashing 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 demopar3d("userMatrix") to generate NaNs and failXvfb on macOS problemsrgl.setMouseCallbacks() to allow user actions#includesXvfbrgl_init() for R 2.6.0 compatibilitymaterial3d()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=TRUEplot3d.qmesh3d() did not return resultgrid3d(), added nticks argument to bbox3d(), axis3d() and axes3d().par3d("scale")type="s" to plot3d() to draw spheresList and ListIterator internallyrgl.viewpoint() default to be compatible with r3dDefaultsrgl.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 renderedlinestriprgl.bringtotop(), added stay option (win32)djmrglrgl.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/MakefileLDFLAGS for OpenGLU libraryrgl.sprites() ‘radius’ bug fixedAutoDestroy and used through Ref’sfree’d when they become unused e.g. texture objects are created.setversion.shproject.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.hman/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.objrgl_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