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
.readSTL()
can now read (some) ASCII format STL
files.uname
is no longer used during startup (PR #435
submitted by Jonathon Love).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).scene3d()
objects didn’t handle suppressed
axes properly, drawing the default axis instead (issue #241).rgl
would segfault when the
“fixed” font was not found.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).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
directoryvalgrind
shinyGetPar3d()
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.h
startTime
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#include
sXvfb
rgl_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=TRUE
plot3d.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
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