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.
Bufferare returned as arrays with dim
c(n, n, count).
plot3d.rglscenemethod now passes
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.
rglis running within
reprex::reprex()and if so arranges that a screenshot will be included in the output.
silentarguments passed in
playwidget()may now include a component specifying HTML dependencies.
rglwidgetClass.readAccessor()method to let other code use the buffering.
pop3d(tag = x)did not always find the objects with
tag == xif they were not in the current subscene.
"filled", as documented in some places.
fogsetting wasn’t handled properly by
colis accepted as a synonym for
planes3d()objects were not displayed consistently in
rglwindows 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.
rmarkdown, blank plots could be shown when
par3d(skipRedraw=TRUE)was set (issue #188).
sprites3d()weren’t lit correctly in WebGL (issue #189).
pkgdown2.0.0 has been released, a number of internal workarounds to support the development version have been removed.
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
tagged3d()function returns information on tags.
indicesparameter, similar to the indices in
Bufferobject, based on glTF design, for holding binary data for
0(at specified location),
5(in front of it), and
6(behind it) in
crosstalkis now a Suggested package, rather than a required one.
Makevars.ucrtfile 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.
deldirversion 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).
asEuclidean()etc. more consistent.
as.rglscene()generic has been added, though no methods are defined in this package.
downlit0.4.0 has been released with support for
rgl, so instructions for installing the devel version have been removed.
--staticflag to configure script for FreeType installation. (Suggestion of Simon Urbanek and Prof. Brian Ripley.)
"back"material settings in mesh objects.
rglcould not find routines in the DLL on some Windows installs (Issue 148.)
expect_known_scene()function to work with
par3d("mouseMode"), corresponding to actions to take when no button is pressed.
setUserCallbacks()function to allow user-specified mouse callbacks in WebGL code.
floating, with objects that move as the bounding box changes. See
mtext3d()argument order has changed.
setAxisCallbacks()function to allow user-specified axis drawing routines.
manipulateWidgetpackages 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
rglfor users who don’t use them.
par3d("useFreeType")and the result is saved.
knitrhas now been removed.
RGL_DEBUGGINGenvironment variable has changed: now it must look like
webshot = TRUEhas been added to
WM_PAINThandler 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
rglwas loaded. The workaround is now skipped when RStudio is detected. Use
options(startQuartz = TRUE)in RStudio before loading
rglto run it, or
options(startQuartz = FALSE)to suppress it.
rmarkdowndocuments were produced at the wrong size.
example(playwidget), issue #102)
pkgdowncompatibility have been added. See
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/NEWSfile so it is visible here.
asEuclidean2()to work directly with
3 x nand
4 x nmatrices.
rglExtrafonts()to load additional fonts for use with FreeType rendering. Requires the
point_antialias = TRUEnow gives round points in
rglwidget()is no longer used.
rglwindows are grouped, based on code by Ivan Krylov.
filledContour3d()now accepts levels in decreasing order.
as.mesh3d.rglId()have been improved.
r3dDefaults$useFreeTypeis now set to
FALSEon Windows, so that system fonts will be used by default.
family = "symbol"has never really worked, and is no longer recommended.
compare_proxymethod in case a recent
testthatis being used.
snapshot3d()(reported by Tony Hirst: https://github.com/dmurdoch/rgl/issues/21 .)
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
Makevarsfiles caused builds using a parallel make to fail.
rglwidget(), background images could cause other parts of the display to disappear.
knitrdocuments will now be simplified in versions of
knitrthat incorporate its PR#1892.
snapshot3d(), to use the
webshot2package (currently only available from Github; see
?snapshot3dfor details) to produce snapshots even on headless systems.
rwinlibduring the build. (Contributed by Jeroen Ooms.)
shinySetPar3d()now accepts a list, as returned in
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.)
rglwill 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.
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.
rglwill cause it to not use X11 at all.
dratrepository to hold the unreleased
--disable-openglconfigure 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.
open3d()now has class
knitrwill 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.)
angleWeightedargument, defaulting to
rglwidget()displays of transparent spheres.
"mesh3d"objects, and use it in
knitrhooks, so support for
rglshould 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.
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.
rgl.bg()to allow increased or decreased fog.
rgl.spheres(), to allow them to be drawn more quickly when transparency is used.
dots3d()have been rewritten to share code, allowing meshes to have different front and back material properties.
ids3d()have been added. Generally, users should use these rather than
snapshot3d()now has optional width and height parameters for the saved snapshot.
knitroption to use when autoprinting.
snapshot3d(width = NULL, height = NULL).
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.
rglwidget is included in a
Gitbookhas 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 present
setGraphicsDelay()function to work around bug in macOS Catalina XQuartz.
"depth_mask"material property was being ignored in
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::r3dDefaultsif they are not present in the user’s
bgplot3d()now uses the background colour from argument
bg.color(defaulting to the background color from
getr3dDefaults()) rather than always choosing white.
?rgl.inithelp topic to describe initialization issues.
tkrglpackage have been moved into
anaglyph()function in the
"stereo"demo now prints information about failed pixel reads.
inst/slowTestsso that running them is optional (and the CRAN checks will go faster).
readOBJ()that affected reading texture coordinates.
snapshot3d()now read from the back buffer, which should increase reliability.
viewportwas not always updated.
pkg-configbut no freetype2.
bgplot3d()to wipe out fog setting.
writeASY()to work with a more recent version of Asymptote. Use
ver244 = TRUEfor 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
meshColoras an argument to
dot3d(); changed default to no longer give warning if
meshColoris not specified.
"mesh3d"objects, so that changes caused by the above are ignored.
as.mesh3d.ashape3d()for compatibility with conflicting method from
natpackage version 1.8.11.
std::ptr_funas requested by CRAN. Other changes to remove compile warnings also made.
clipMesh3d()to allow smooth clipping of mesh objects
plot3d.lm()method handle a larger variety of models, by allowing for curved surfaces.
as.mesh3d.default()method to convert triangles or quads to a
as.triangles3d()generic with methods to convert
"mesh3d"objects into matrices representing triangles.
as.mesh3d.rglId()methods to convert displayed objects to usable data.
shinySetPar3d()functions for Shiny interaction.
thigmophobe3d()function to place labels away from other points using
arc3d()function to draw spherical arcs.
"polygon_offset"material property, to allow lines to be drawn on surfaces.
"tri"classes (produced by
plot3d()methods for objects of class
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.)
"ashape3d"objects from the
alphashape3dpackage 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
text3d()and related functions: dropped deprecated argument
offsetlike base graphics
"mesh3d"objects: added print methods, added
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
aspectas the default method.
pch3d()now allows separate
bgspecifications 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::combineWidgetsfunction when putting multiple objects into a pipe.
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.
rglmessed 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.
rchkhave been fixed.
rgl.*functions) were not handled properly. (Reported by Ty Tuff.)
rgl.postscript()) updated to version 1.4.0.
rglwidget()to fail to work in a
shiny, etc.) in scene when
useSubscene3d()now returns the id of the previously active subscene, to make temporary changes more convenient.
renderPlaywidget()now have an optional argument
outputArgsfor 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
vertexSetter()can now set plane parameters.
platform.cppso it works with
rglwidget()code using a vertex shader.
vertexControl()be duplicated in the original has been removed.
par3dinterp()did not always choose the best direction for interpolation of the
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
writeASY()so that they don’t change the working directory.
add = FALSEargument to
"shiny.tag"objects are now supported as inputs to
playwidget(), so that
rglwidget()values can be wrapped in
htmltools::div()to set their style.
figHeight()functions for sizing
rglplots in R Markdown documents.
layout3d()handled multi-row cells incorrectly. (Reported by Felix Carbonell.)
subsetControl(), and added
texcoordsfor consistency with other functions, and to avoid a collision with the
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
rglhelp in a collection of web pages. This showed up a number of small bugs, which have been fixed.
movie3d()now optionally tries the R
magickpackage first, then the external ImageMagick v7 command
convert. (The external change suggested by Earl F. Glynn.)
par3d()reports on the version of OpenGL that it sees (as component
addNormals()gave an error if the mesh it was working with had degenerate triangles or quads. (Reported by Rolf Turner and Graham Griffiths.)
pch3d()(reported by Gina Joue).
persp3d.deldir()methods to allow plotting of surfaces defined by irregular collections of points.
rglToBase()functions to compute Euler angles for the
lattice::cloud(), and base graphics
arrow3d()(based on the function of the same name in the
pch3d()to give an approximation to plotting symbols using
pch=<number>in base graphics.
writeASY()for output in Asymptote format, which will allow inclusion in PDF files.
rgl.attrib.info()to display information about object attributes.
rglwidgetcode back into
"rglHighlevel"(using the new
highlevel()functions) to indicate that a low- or high-level plotting function has been called. If the new option
TRUE, printing objects of either class will trigger automatic printing of the
scene3d()to allow them to be used in
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).
jsonliteso 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
rglscenes 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.
rglwidgetpackage (though the functions in
"rgl.keepopen"; replaced it with
accumulateargument to the subset WebGL controls.
bbox3d()was never used and has been removed. Use
values = NULLin
vertexSetter()to allow code to directly set values.
rgl.attrib()and are stored by
plot3d(), etc.) did not return the correct id for the bounding box decoration.
xlenetc. to zero in
rgl.bbox()now (correctly) suppresses tick marks. (Reported by Philipp Angerer.)
texcoordsin 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).
plot3d()did not work properly with a shared mouse. (Reported by Marian Talbert.)
knitrto 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.
rglto fail to compile when
libfreetype2.6 was linked.
writePLY()(reported by Kurt Hornik).
hook_webgl()functions, based on the
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.
"rglClass"that allows access to many of the scene internals. (Inspired by patch submitted by Jeff Allen.)
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
reuseparameter and attribute of the result.
rgl.snapshot()now evaluates the
fmt, so windows created when those are evaluated don’t overlay the
rglwindow. (Suggestion of Keith Jewell.)
writeWebGL()now includes an argument
commonParts, to allow omission of common code in multi-figure displays.
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).
"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.)
NULLdevice did not handle changes to
ignoreExtent = TRUEwere not plotted.
writeWebGL()did not display the
bboxdecoproperly when working in a subscene.
rgl.snapshot()now works with the
NULLdevice (but produces a black snapshot). This allows testing with
par3d("modelMatrix")from 0.94. This affects
NULLdevice now does not make any spurious OpenGL calls.
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)
writeWebGL() to fail when a
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.
rgl.pop(): the type is now ignored if
par3d("modelMatrix")no longer includes the observer translation
spin3d()functions now have arguments dev and subscene to specify where they apply.
writeWebGL()) at the request of the Debian administrators.
normalizePath()on filenames, so tilde expansion should be supported.
persp3d(). (Problem found by Graham Griffiths using polar coordinates; all
r=0points were at the same location.)
rgl.attrib()will return them even if they were calculated by
scene3d()now records light settings.
par3d()could generate an error if an unnamed list was passed in.
material3d()lost settings for textures
rgl.attrib()showed up in
writeWebGL(). (Reported by Brian Ripley.)
clipplanes3d()function to implement clip planes. (Still only partially implemented.)
rglC++ 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.
rglDLL 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.
rgldeclares most of its C++ objects in the global namespace. Recently this has caused clashes with the
igraphpackage, which does the same, and which also has a Shape class. As a temporary workaround the
rglclass has been renamed to
"rglShape". A full
rglnamespace 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.
rgl.select()have been exported, as they were used by the car package.
rglnow prints a warning when a requested font is unavailable and the default font is substituted.
writePLY()had errors writing points and lines.
writeOBJ()(issue 4732, reported by Alejandro Baranek).
rglversion into the WebGL file
CHECKGLERROR, so that setting
USE_GLGETERRORto 1 in
R.hwill enable detailed checking
writeOBJ()(reported by Matthias Zeeman),
plot3d()) caused the scene to be redrawn, even if
addNormals.mesh3d()failed on objects when the matrices of triangles or quadrilaterals had zero columns.
rotate3d.mesh3d()did not transform normals properly
writeWebGL()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=FALSEproperly. (Reported by Yihui Xie.)
writeWebGL()function, to allow scenes to be viewed in a web browser.
WM_CLASSproperty of X11 windows. (Contributed by Philip Johnson.)
rglwindow now handles
ESCkey 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
planes3d()to draw lines and planes intersecting with the bounding box.
rgl.attrib()(and internal function
rgl.getmaterial()) added to allow objects in the scene to be examined.
configure.winfor bi-arch compatibility. Windows installers can set
HAVE_PNGto a non-empty value, and
rglwill look for the libpng files in the default
LOCAL_SOFTlocation when installing.
"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.hthat were causing problems in an old version of gcc on Solaris.
rgl.postscript()now adjusts the size of text following the
familysettings are still ignored.
options(rgl.antialias=0)to disable it.
rgl.texts(): zero-length texts argument caused crash. (Reported by Michael Friendly.)
"alpha"component of the material properties to be messed up. (Bug #809)
rgl.pixels()examples and demo.
cylinder3d(), for debugging or special effects.
FOVto be set to 0, for an orthogonal projection.
"qmesh3d"is only kept for back compatibility.
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
convertargument is more flexible.
rgl.snapshot()gives more informative error messages when libpng is not available.
as.character()to give nicer looking labels.
warning()to report messages, rather than popups or
open3d(): “…” was being ignored.
homogeneous=FALSEcoordinates were not handled properly.
?rglexample to display this file.
rglFonts()was being set at install time, but it should be set at load time.
rgl.pop()could cause corruption when multiple windows were open.
par3d()parameters to allow window size to be controlled from R.
rgl.setMouseCallbacks()to allow user actions
qmeshobjects, but (at present)
material3d()now preserves the values of unspecified parameters (as documented, but not previously functioning)
clear3d()can now reset material properties to the defaults, and
persp3d(), by specifying matrices for x and y coordinates
plot3d.qmesh3d()did not return result
plot3d()to draw spheres
rgl.viewpoint()default to be compatible with
rgl.ids()to report on them.
par3d(): objects plotted when this is true are ignored when calculating the bounding box
djmrglfor annotating plots.
plot3d()high level plot function
material3d(), which can both set and query material properties; changed most
*3dfunctions so they leave material invariant across calls.
open3d()to set background and material defaults
aspect3d()to control the aspect ratio of the bounding box.
zAxismouse modes, set
REprintfin X11 and OSX
rgl_init()call fails, the package will still load with a warning (but most function calls will result in errors).
ellipse3d()generic and methods for drawing confidence ellipsoids
decorate3d()to draw all the decorations,
rgl.primitive()now does sanity checks on inputs
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 rendered
rgl.bringtotop(), added stay option (win32)
rgl.quit()crashed on X11 occasionally.
rgl.surface()to allow surface over any coordinate plane.
r3dDefaultsvariable to allow user to set defaults
zlibfrom source tree
rgl.sprites()‘radius’ bug fixed
AutoDestroyand used through
free’d when they become unused e.g. texture objects are created.
src/buildchanged now a single variable MODS will extend.
rgl.dllnow contains an R compliant Resource information generated by R
rgl_quit()on process exit
R CMD checkruns through with 2 WARNINGS (according to
enumid was broken, fixed (“quads” -> “quadrangles”)
win32/vc: fixed fpu control word precision to remain on 64 bit links with
rgl_quit(): explicit client initialization
setup.bat: build setup for windows
system.file( <subpath>, package="rgl" )in examples to retrieve texture files
autoUpdate, modified win32 main loop, on hide,
autoUpdatedisabled, on show enabled