rgl.incrementID()
has been added.- An example using log axes has been added to the
help page for
axes3d()
.
clear3d("all")
, callingbg3d()
on the root subscene, and some cases ofpop3d()
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 withsmooth = FALSE
.
readSTL()
can now read (some) ASCII format STL files.- The configure script has had minor changes, and autoconf support files have been updated.
uname
is no longer used during startup (PR #435 submitted by Jonathon Love).
- Background plots did not always appear (issue #421).
- Changing the background resulted in an additional background object instead of replacing the current one.
- Colors weren't handled correctly by
writePLY()
(issue #425). bbox3d()
objects ignored thexlen
,ylen
andzlen
settings when rendered usingrglwidget()
(issue #415).- In certain cases, the
WebGL
vignette started with the mouse mode set to "selecting". - The
rglwidget()
function gets a new argumentfastTransparency
which makes WebGL mimic thergl
device when drawing transparent objects. The default value isTRUE
unless optionrgl.fastTransparency
is set toFALSE
. writeSTL()
now writesendsolid
, which is required by some apps.
sprites3d()
now supports plotting different 3D symbols at each location (issue #406).
- ARIA support now declares
rgl
scenes withrole = "img"
. - The vignettes in this package now use
markdown::html_format
, so they no longer require Pandoc (though Pandoc-using output formats likehtml_document
will still be supported). - Christophe Geuzaine's GL2PS library (used by
rgl.postscript()
) updated to version 1.4.2, and blending (transparency) has been enabled in formats that support it. - The
Makevars.ucrt
file has been changed for compatibility with an upcoming change to Windows Rtools. (Pull request #412 submitted by Tomas Kalibera).
- The ARIA support caused
htmlwidgets::saveWidget()
to fail when run in a Shiny session. text3d()
andmtext3d()
did not pass thecex
argument toplotmath3d()
(pull request #384).polygon3d()
failed when given exactly 3 points (issue #388).snapshot3d()
failed on Windows with some versions ofwebshot2
(issue #391).- Fixed issues caused by misuse of
dev.off()
using new functionsafe.dev.off()
. - Fixed issue with
warning()
call reported by CRAN. - Smooth shapes were not rendered correctly by
rglwidget()
. This was especially noticeable for spheres withfov = 0
, but was present in other cases as well (issue #401). textype = "alpha"
was not rendered correctly byrglwidget()
(issue #408).setUserCallbacks()
and related functions failed when thesubscene
argument was anything other than the root subscene.
- Support for non-PNG textures has been added. Currently
supported: JPEG files and any other object
for which
grDevices::as.raster()
works, e.g. matrices. (Fixes issue #196.)
- Support for "alt" text has been added to
rglwidget()
. Full support in R Markdown orknitr
requires aknitr
update to version 1.42.12 or newer. - Some of the tests have been relaxed slightly so they shouldn't trigger errors on the M1Mac test platform.
- Internally, the C++ code has dropped the use of the internally
defined
String
type, settling onstd::string
instead. subdivision3d()
,clipMesh3d()
and related functions now (optionally) record the original faces associated with each new one in amesh$tags
addition to the output.
- The
Makevars.win
file was being produced incorrectly on older Windows versions. rgl.window2user()
did not work correctly when multiple panes were showing. This causedarrow3d()
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).- Spheres did not show textures correctly (issue #360).
hover3d()
failed to display default labels in R (issue #362).shade3d()
didn't handle meshes with a mix of triangles and quads properly whenmeshColor == "faces"
.subdivision3d()
and related functions now handle colors properly.addNormals()
sometimes gaveNaN
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.)
- A new function
hover3d()
has been added to display "hover hints": labels next to points when the mouse passes near them. - A new material property
"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. - Many of the demos have been moved to a new vignette called
demos
. rgl
now uses theglad
loader which will eventually allow access to newer OpenGL functions in systems that support them.
- The
texenvmap = TRUE
material property is now supported in WebGL. - The method of including shader source code has changed to work around a limitation in Jupyter.
- The default C++ standard is now accepted, rather than requiring C++11. On R versions prior to R 4.2.0 C++11 is still requested.
- The
as.mesh3d.rglId()
andas.triangles3d.rglId()
methods and theselectpoints3d()
,writeOBJ()
,writePLY()
andwriteSTL()
functions did not handle indices in the objects they were processing (issue #293). - Transparent planes were not always drawn properly in WebGL (issue #300).
view3d()
now returns alowlevel()
result so that it will be handled properly in WebGL vignettes with auto printing.- If
transform3d()
orrotate3d()
changed the orientation of amesh3d
object with normals, the normals ended up with the wrong sign. (Reported by Stephane Laurent.) scene3d()
(and hencerglwidget()
) 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.- It was possible to call
glVersion
before OpenGL was initialized; this resulted in a segfault with the newglad
loader, and may have been the cause of some older crashes as well. This has been fixed. readOBJ()
did not handle comments properly.- Sprites consisting only of line segments (as used
for example by
pch3d()
) caused rendering to fail inrglwidget()
(issue #316). - Headers have been cleaned up to fix problems identified by Rtools43.
- The long promised deprecations of the
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
, andrgl.viewpoint
. - A vignette "Deprecating the
rgl.*
interface" has been added. - Also deprecated:
elementId2Prefix
,writeWebGL
- Since
rgl.material
is deprecated and no longer contains the list of material types in its argument list,rgl.material.names
andrgl.material.readonly
have been added. - Similarly,
rgl.par3d.names
andrgl.par3d.readonly
contain lists of properties that may be set or queried inpar3d()
. - The flexibility improvements for
surface3d()
in 0.111.6 were incomplete. - Argument
flip
has been added tosurface3d()
to allow front and back to be switched.
- Added a panning example to the help page for
setUserCallbacks()
. - Replaced all calls to
sprintf
from C/C++ code with calls tosnprintf
. surface3d
andrgl.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 anid
to query properties for individual objects.- Since
rgl.material
is soon to be deprecated and no longer contain the list of material types in its argument list,rgl.material.names
andrgl.material.readonly
have been added. - Similarly,
rgl.par3d.names
andrgl.par3d.readonly
contain lists of properties that may be set or queried inpar3d()
. - Made some examples conditional on interactive use to save time on CRAN.
- Default mouse modes used when a window is opened by an
rgl.*
call (which is not recommended!) now match the defaults inrgl::r3dDefaults
. - Missing values could cause
surface3d()
to segfault. - The C source code for
gl2psGetFileFormat
missed declaring a prototype.
- Material property
"blend"
has been added, to allow various kinds of blending for semi-transparent objects (issue #245).
- The
Buffer
object now handles reading of sparse accessors. - Low level drawing of primitives has been made more memory efficient. This is only likely to make a noticeable change with very large objects, where R was running out of memory because of unnecessary duplication. (Related to issue #260.)
- Recycling of x, y and z vectors in several functions is more consistent.
- The
polygon3d()
function now chooses coordinates automatically, astriangulate()
does (PR #262.) - The
mtext3d()
and related functions such astitle3d()
now accept language objects other than expressions, asplotmath3d()
always has (issue #273).
- The bounding box could be calculated incorrectly if data all had large values (issue #250).
- Shiny displays failed to load the shaders (issue #249).
transform3d()
failed due to missing argument (issue #253).readOBJ()
is now more flexible in what kinds of separators it will accept. (issue #258).- Failure to initialize could cause a segfault.
- On non-macOS platforms, gray-scale textures failed to display, with a message about an invalid enumerant.
- The third coordinate for
adj
that was added in 0.108.3 was not rendered properly inrglwidget()
displays of text. This sometimes caused text to disappear when it was near the far limit of the display (issue #269). - The X11 error fix in 0.109.6 could result in R
freezing in
Rcmdr
. - Low level drawing functions are now more consistent
about returning an invisible
NULL
if asked to plot zero items, rather than raising an error or crashing (issue #274). - Calling
axis3d()
with no ticks or labels no longer triggers an error, it now silently returnsNULL
.
rglwidget()
displays now act on "pointer" events, not just "mouse" events, so they should be more usable on touch screens and tablets (PR #240).
- Plotting
scene3d()
objects didn't handle suppressed axes properly, drawing the default axis instead (issue #241). - On some systems using X11,
rgl
would segfault when the "fixed" font was not found. - X11 errors could cause R to abort.
- Changes to support glTF animation:
- Handling of
embedding = "modify"
for the model matrix has changed. Now the centering step is only done forembedding = "replace"
. In addition, various bugs have been fixed. - If a subscene has no lights defined, the lights from the parent are used.
plot.rglscene()
now ends with the root subscene as current. It also allows specification ofopen3d()
parameters in a list.- The
MATn
types inBuffer
are returned as arrays with dimc(n, n, count)
. - The
plot3d.rglscene
method now passes...
toopen3d()
. - The
setUserShaders()
function now allows arrays of 4x4 matrices as "uniforms", and allows additional textures to be specified.
- Handling of
sprites3d()
now has the option ofrotating = TRUE
, to allow 3D sprites to rotate with the scene.- Added
getShaders()
function to get shaders used in WebGL. - Now detects if
rgl
is running withinreprex::reprex()
and if so arranges that a screenshot will be included in the output. - Added default shaders to be used in
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.
- Now that
pkgdown
2.0.0 has been released, a number of internal workarounds to support the development version have been removed. - Added
as.mesh3d()
methods for"rglsubscene"
and"rglscene"
. open3d()
now handlesuseNULL
andsilent
arguments passed inparams
.- Controls passed to
playwidget()
may now include a component specifying HTML dependencies. - Added
rglwidgetClass.readAccessor()
method to let other code use the buffering. - Changed the internal organization of bounding box calculations.
- All functions that produce meshes now accept
material properties. Newly modified to do so using the
...
argument:cylinder3d()
, andgetBoundary3d()
. - Updated the system requirements and installation instructions.
- Solid bounding box decorations now try harder to display 3 faces (issue #206).
- Now that
webshot2
is on CRAN, instructions for installing it from Github have been removed. - Sometimes
webshot2
snapshots are very slow, so the default for thewebshot
argument tosnapshot3d()
now depends on theRGL_USE_WEBSHOT
environment variable, usingTRUE
if it is unset. (Reported by Prof. B. D. Ripley.) - If the Chrome browser is not found,
snapshot3d(webshot = TRUE)
now issues a warning and reverts to usingrgl.snapshot()
. - Buffers now use "normalized integers" to store color or texture coordinate values that lie between 0 and 1 when it saves some space.
- At the request of CRAN, the
akima
package is no longer suggested.
as.mesh3d.rglobject()
didn't handle objects with indices properly.- In WebGL, the front vs back calculation sometimes got the wrong result (issue #164).
pop3d(tag = x)
did not always find the objects withtag == x
if they were not in the current subscene.- The default values for
front
andback
inrgl.material
andmaterial3d
are now"filled"
, as documented in some places. - The
fog
setting wasn't handled properly bybg3d()
. - Numerous cases of partial argument matching were fixed (suggestion of Henrik Bengtsson in issue #170.)
- Argument
col
is accepted as a synonym forcolor
inmaterial3d()
andrgl.material()
. planes3d()
objects were not displayed consistently inrgl
windows and WebGL displays, because the bounding boxes were not computed consistently (issue #169).- Some initialization wasn't done properly in Shiny apps, so they failed after a redraw (issue #173).
- Buffers are now optional, as they don't work with Shiny scene changes (also issue #173).
- The NULL device would sometimes miscalculate the bounding box.
selectpoints3d(closest = TRUE)
selected too many points when multiple objects were in the scene.- Clearing nested subscenes could cause a segfault and crash.
- In
knitr
andrmarkdown
, blank plots could be shown whenpar3d(skipRedraw=TRUE)
was set (issue #188). - Objects drawn with
sprites3d()
weren't lit correctly in WebGL (issue #189). - Objects with textures were sometimes drawn more than once, both before the texture loaded and after. This was most noticeable for objects with user textures.
- Axis mode
"pretty"
got lost when scenes were redrawn. - Tick labels were sometimes lost in WebGL displays and
snapshot3d()
results (issue #197). - The new material properties from 0.107.10 and 0.108.3
were not handled properly by
plotmath3d()
. rglMouse()
did not set the default value of the drop-down selector properly (issue #213).merge.mesh3d()
, used byfilledContour3d()
, didn't handle colors properly (issue #212).bg3d(sphere = TRUE)
has been fixed (issue #207).- Textures were not appearing on spheres, and front-back differences weren't being rendered (issue #217).
- When "knitting" within RStudio under R 4.2.0 on
Windows,
rgl
scenes didn't appear (reported by Dieter Menne.) A workaround has been added. - In
rglwidget()
, axis labels were not always displayed, and did not move with solid bounding box decorations properly (issue #206). - On some systems,
lines3d()
using both missing values and transparency did not draw properly (issue #234, originally reported by Gaspar Jekely). - The
rglShared()
example failed whencrosstalk
was uninstalled.
- Changes introduced in 0.100.50 lacked checks; these caused segfaults in Windows with R 4.2.0 and RStudio (issue #208).
- A typo caused problems loading fonts on some systems.
- Added
getBoundary3d()
function to extract the boundary edges of a mesh. - Added material property
tag
, a string associated with each object. The value is reported byids3d(tags = TRUE)
and may be used to select objects in most functions that use ids, but otherwise is largely ignored byrgl
. Thetagged3d()
function returns information on tags. - Primitive types (points, lines, segments, triangles, quads)
can now accept an
indices
parameter, similar to the indices inmesh3d
objects. - Added
Buffer
object, based on glTF design, for holding binary data forrglwidget()
.
- Allowed for a third coordinate in
text3d()
'sadj
parameter. - Added support for
adj
,pos
andoffset
tosprites3d()
. - Added support for
pos
values of0
(at specified location),5
(in front of it), and6
(behind it) intext3d()
,sprites3d()
andplotmath3d()
. crosstalk
is now a Suggested package, rather than a required one.- The
Makevars.ucrt
file has been modified with contributions from Tomas Kalibera to work with hiswinutf8
build of R. bgplot3d()
no longer pauses for each page when running examples.deldir
version 1.0-2 is incompatible withrgl
. Added thecheckDeldir()
function to avoid running it.shade3d()
treated texture coordinates like colors, and duplicated the first one for the whole face whenmeshColor = "faces"
was chosen. Instead, they are now treated like vertex coordinates. (Reported by Michael Sumner in issue #145).- Corrected the documentation and made the implementations
of
asHomogeneous()
,asEuclidean()
etc. more consistent. - An
as.rglscene()
generic has been added, though no methods are defined in this package. downlit
0.4.0 has been released with support forrgl
, so instructions for installing the devel version have been removed.
- Fixed rendering of text as sprites3d() objects.
- Added
--static
flag to configure script for FreeType installation. (Suggestion of Simon Urbanek and Prof. Brian Ripley.) shade3d()
,wire3d()
anddots3d()
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.)- Some cases where allocations were not protected have been fixed.
- Added
expect_known_scene()
function to work withtestthat
. - Added some
testthat
tests. - Prepend a 5th entry to
par3d("mouseMode")
, corresponding to actions to take when no button is pressed. - Allowed any of the mouse modes to be applied to the mouse wheel.
- Added the
setUserCallbacks()
function to allow user-specified mouse callbacks in WebGL code. - Added Javascript code for support of movable
axis labels in
bboxdeco
objects. - Most drawing functions can now draw in the margins
using new material properties
margin
andfloating
, with objects that move as the bounding box changes. See?mtext3d
for details. - The
mtext3d()
argument order has changed. - Added the
setAxisCallbacks()
function to allow user-specified axis drawing routines. - Exposed (and generalized) the
as.tmesh3d()
function.
- The
shiny
andmanipulateWidget
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" ofrgl
for users who don't use them. - The NULL device can now specify
par3d("useFreeType")
and the result is saved. - Code to work with pre-1.33 versions of
knitr
has now been removed. - Added documentation of Javascript to web page.
- The handling of the
RGL_DEBUGGING
environment variable has changed: now it must look likeTRUE
to trigger Javascript debugging mode. - Argument
webshot = TRUE
has been added tomovie3d
(issue #113). - The assert() macro is now always defined.
- In Windows, the
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 ofwaldo
.
- The bug workaround in 0.105.22 for issue #27 triggered a bug
in RStudio, resulting in two RStudio processes showing up
when
rgl
was loaded. The workaround is now skipped when RStudio is detected. Useoptions(startQuartz = TRUE)
in RStudio before loadingrgl
to run it, oroptions(startQuartz = FALSE)
to suppress it. - In some cases, snapshots in
rmarkdown
documents were produced at the wrong size. - Controls failed to modify sphere colors (e.g. as in
example(playwidget)
, issue #102)
- Some of the changes related to avoiding
testthat
errors in other files accidentally introduced a new error in coloring meshes inrgl
: now fixed. readOBJ()
was broken by the 0.106.x changes.merge.mesh3d()
failed for meshes containing points or segments.
- Changes for
pkgdown
compatibility have been added. Seevignette("pkgdown")
. - Added
drape3d()
, to "drape" objects across a mesh. (Contributed by George Helffrich.) - Added
shadow3d()
to project one mesh onto another. - Added
facing3d()
to subset a mesh to parts facing in a particular direction. - Meshes may now include points and line segments as well
as triangles and quads. The arguments to
as.mesh3d.default()
have changed accordingly, and a new functionmesh3d()
has been added. - Reformatted the
inst/NEWS
file so it is visible here. - Added
asHomogeneous2()
andasEuclidean2()
to work directly with3 x n
and4 x n
matrices. - Added
rglExtrafonts()
to load additional fonts for use with FreeType rendering. Requires theextrafont
package.
- The help pages have been edited to continue to
de-emphasize
rgl.*
functions. - Changes have been made for compatibility with the experimental Windows-UTF8 build of R.
- Allowed infinite values for strip limits in
filledContour3d()
. - Setting material property
point_antialias = TRUE
now gives round points inrglwidget()
displays. - The reuse argument in
rglwidget()
is no longer used. - Sphere initialization in WebGL displays is now done entirely in Javascript.
- Set "window_group" in X11 so
rgl
windows are grouped, based on code by Ivan Krylov. filledContour3d()
now accepts levels in decreasing order.mergeVertices()
andas.mesh3d.rglId()
have been improved.r3dDefaults$useFreeType
is now set toFALSE
on Windows, so that system fonts will be used by default.- Text
family = "symbol"
has never really worked, and is no longer recommended. - Added
compare_proxy
method in case a recenttestthat
is being used.
- The width and height of an
rglwidget()
once again adapt to the viewer window in RStudio (issue #74).
- Add
Biarch
toDESCRIPTION
so both architectures are built on Windows.
- Fixed error in new args to
snapshot3d()
(reported by Tony Hirst: dmurdoch/rgl#21 .) - Improved test for presence of WebGL (suggested by Git Demont, dmurdoch/rgl#31 ).
- On macOS an interaction between
rgl
and thequartz()
device caused a segfault (see issue #27). Added workaround. (reported by Rich Heiberger, dmurdoch/rgl#27). - Fixed a bug affecting fat (
lwd > 1
) line segments inrglwidget()
. - A bug in the
Makevars
files caused builds using a parallel make to fail. - A bug in conversion of displays to WebGL prevented planes from displaying properly.
- In
rglwidget()
, background images could cause other parts of the display to disappear.
- Inclusion in
knitr
documents will now be simplified in versions ofknitr
that incorporate its PR#1892. - Added
webshot
argument tosnapshot3d()
, to use thewebshot2
package (currently only available from Github; see?snapshot3d
for details) to produce snapshots even on headless systems. - Moved development home from R-forge to Github.
- Windows builds now download Freetype from
rwinlib
during the build. (Contributed by Jeroen Ooms.) shinySetPar3d()
now accepts a list, as returned ininput$par3d
byshinyGetPar3d()
, as input. (Suggestion of Yohann Demont.)- The default color scheme for
filledContour3d()
changed in R versions previous to 3.6.0, ashcl.colors()
didn't exist in those versions. (Reported by Daniel Baston.) - Testing shows that with the above change,
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.- Both
snapshot3d()
andrgl.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.- Now builds the non-OpenGL DLL and puts it in
inst/useNULL
, sooptions(rgl.useNULL=TRUE)
before loadingrgl
will cause it to not use X11 at all. - Made the startup code more resilient in case X11 isn't working.
- Set up a
drat
repository to hold the unreleasedwebshot2
package.
- Some bugs in
thigmophobe3d()
,mergeVertices()
andas.mesh3d.default()
have been fixed.
- Added
--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). - Added explicit typecasts to suppress compile warnings.
- Restored some of the Windows configuration from pre-0.101.2 to allow use on older R versions.
- Dropped use of
mathjaxr
, which caused issues on Debian. - Experimental support for handling mouse selection in Shiny
added, along with
"shinyMouse"
demo. - The result of
open3d()
now has class"rglOpen3d"
, andknitr
will use this during auto-plotting.
- Fixed bug in
rglwidget()
that caused it to fail to display text if too many strings were in the same object. (Reported by Yohann Demont.) - Fixed some small bugs, found by
lintr
. - Fixed bugs in Shiny support, and moved Shiny demo code into single files in demo directory.
- Fixed bugs in
addNormals.mesh3d()
method, addedangleWeighted
argument, defaulting toTRUE
. - Fixed bugs in
rglwidget()
displays of transparent spheres.
- Added
clipObj3d()
,contourLines3d()
andfilledContour3d()
functions. - Modified
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.
- Add
merge()
method for"mesh3d"
objects, and use it infilledContour3d()
. - More deprecation of older
writeWebGL()
style controls. - Add extra
knitr
hooks, so support forrgl
should be very similar to support for standard graphics output. - Major rewrite of the WebGL code so that transparency
is handled better in
rglwidget()
. It has also been split into multiple files which are joined with "minification" on installation. - Added utility function
makeDependency()
to support Javascript library in source. - WebGL code now supports fog in scenes. The default
r3dDefaults
now setsmaterial$fog
toTRUE
, andbg$fog
to"none"
. (Inrgl
, 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 retriever3dDefaults$material$color
, with NULL if either part is missing.- Added
fogScale
parameter tobg3d()
andrgl.bg()
to allow increased or decreased fog. - Added
fastTransparency
parameter tospheres3d()
andrgl.spheres()
, to allow them to be drawn more quickly when transparency is used. "mesh3d"
methods forshade3d()
,wire3d()
, anddots3d()
have been rewritten to share code, allowing meshes to have different front and back material properties.- New functions
cur3d()
,set3d()
,close3d()
andids3d()
have been added. Generally, users should use these rather thanrgl.cur()
,rgl.set()
,rgl.close()
andrgl.ids()
. snapshot3d()
now has optional width and height parameters for the saved snapshot.- the cursor now reflects the mouse mode in
rglwidget()
displays. - Texture coordinates in mesh objects now act the same
as colors with respect to the
meshColor
variable. - Touch events are now supported in WebGL.
- Added
"snapshot"
knitr
option to use when autoprinting. - Added defaults to
snapshot3d(width = NULL, height = NULL)
. - Added
as.mesh3d.rglobject()
method. - Added
clip_to_density
argument toplot3d.lm()
method. - The build files have been updated to work with Rtools40 on Windows.
rglwidget()
now saves a copy of the original scene, so it can be reconstructed or modified later.
- Fixed some memory leaks found by
valgrind
, and problems seen on systems with no functional Asymptote or Pandoc. - A bug in the initial color of a mesh object has been fixed.
- A bug in translating mouse coordinates (reported on
StackOverflow by Richard Morey) when an
rgl
widget is included in aGitbook
has been fixed. - Modified
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- added
setGraphicsDelay()
function to work around bug in macOS Catalina XQuartz. - Made various improvements to reduce notes and warnings during install, including suppressing deprecated OpenGL warnings on macOS.
- Some declarations in WebGL made assumptions that were not valid on mobile devices.
- The
"depth_mask"
material property was being ignored inrglwidget()
. rgl.snapshot()
andrgl.postscript()
could crash if a zero length filename was passed to them.
- Changed
rgl.attrib(id, "normals")
so the normals will be returned whether or not the object is lit. (Suggestion of Tyler Morgan-Wall) - The labels used in
rglwidget()
are now independent ofset.seed()
, using code borrowed from Shiny for our own private RNG. getr3dDefaults()
now gets values fromrgl::r3dDefaults
if they are not present in the user'sr3dDefaults
list.bgplot3d()
now uses the background colour from argumentbg.color
(defaulting to the background color fromgetr3dDefaults()
) rather than always choosing white.- The maintainer email address has been changed to murdoch.duncan@gmail.com.
- Fixed bug in
plot3d.rglscene()
that caused restored subscenes to ignore the mouse. next3d()
no longer messes up when a user changes active subscenes.- If a sufficient version of Pandoc is not found, the
vignettes will still run, but won't execute any
rgl
code.
- Added
?rgl.init
help topic to describe initialization issues. - Added sanity check to setting of
par3d("windowRect")
.
- Rewrote the initialization code to deal with problems
related to indirect GLX and
Xvfb
.
demo(stereo)
now usesplot.raster()
rather thanimage()
.- Added a section on textures to the main vignette.
- The configure script has been updated.
- The functions in the
tkrgl
package have been moved intorgl
. - Demo tests are suppressed when run with the
rgl
null device. - The
anaglyph()
function in the"stereo"
demo now prints information about failed pixel reads. - Included textures have been compressed (and in some cases repaired).
- The tests of the demos have been moved to
inst/slowTests
so that running them is optional (and the CRAN checks will go faster).
- Fixed a bug in
readOBJ()
that affected reading texture coordinates. rgl.pixels()
,rgl.snapshot()
andsnapshot3d()
now read from the back buffer, which should increase reliability.- Fixed bug when setting
windowRect
:viewport
was not always updated. - Fixed bug in handling mouse wheel events: they were not directed to the correct subscene.
- Fixed bug in configure script for systems with
pkg-config
but no freetype2. - Fixed bug that caused
bg3d()
andbgplot3d()
to wipe out fog setting. - Fixed
writeASY()
to work with a more recent version of Asymptote. Usever244 = 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.- In Shiny, controllers like
rglMouse()
did not automatically link to anrglwidget()
.
- Added
meshColor
as an argument totmesh3d()
,qmesh3d()
anddot3d()
; changed default to no longer give warning ifmeshColor
is not specified. - Added
all.equal()
method for"mesh3d"
objects, so that changes caused by the above are ignored. - Added
tri_to_keep
argument toas.mesh3d.ashape3d()
for compatibility with conflicting method fromnat
package version 1.8.11. - Removed deprecated C++ functions
std::bind2nd
andstd::ptr_fun
as requested by CRAN. Other changes to remove compile warnings also made.
- added
clipMesh3d()
to allow smooth clipping of mesh objects - Made
plot3d.lm()
method handle a larger variety of models, by allowing for curved surfaces. - Added
as.mesh3d.default()
method to convert triangles or quads to a"mesh3d"
object. - Added
as.triangles3d()
generic with methods to convert"mesh3d"
objects into matrices representing triangles. - Added
as.triangles3d.rglId()
andas.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.
- Fixed the startup code so that systems that don't provide
uname
still work. (Suggestion of Settra Khemri.)
- Fix
thigmophobe3d()
to try to keep up with changes inplotrix::thigmophobe()
. - Stop
rgl.postscript()
from writing files to current directory
- Fix some bugs detected by
valgrind
- Added
shinyGetPar3d()
andshinySetPar3d()
functions for Shiny interaction. - Added
thigmophobe3d()
function to place labels away from other points usingplotrix::thigmophobe()
. - Added
arc3d()
function to draw spherical arcs. - Added
"polygon_offset"
material property, to allow lines to be drawn on surfaces. - Added
plot3d()
,persp3d()
andas.mesh3d()
methods for"triSht"
and"tri"
classes (produced byinterp
andtripack
packages.) plot3d()
methods for objects of class"formula"
and"lm"
and apersp3d()
method for objects of class"formula"
have been added. (A bug in the implementation ofas.mesh3d.deldir()
was found and fixed during the latter addition.)as.mesh3d()
,plot3d()
andpersp3d()
methods for"ashape3d"
objects from thealphashape3d
package have been added.- The mouse mode (trackball, zoom, etc.) can now be applied separately to each individual subscene in a scene. (By default the mode is inherited from the root subscene.)
- Added
par3d("userProjection")
, to allow the user to supply a change to the projection after all other display calculations have been done. - Added
par3d("activeSubscene")
, to allow mouse callback functions to determine which subscene was clicked.
- Added check for
"highp"
support to fragment shader inrglwidget()
. - Updated
text3d()
and related functions: dropped deprecated argumentjustify
, addedpos
andoffset
like base graphicstext()
. - Improved support of
"mesh3d"
objects: added print methods, addedmeshColor
argument towire3d()
andshade3d()
to control how colors are interpreted, added"rgl.meshColorWarning"
option to control warnings about these changes. - The
plot3d.mesh3d()
method now has the same default foraspect
as the default method. pch3d()
now allows separatecolor
andbg
specifications for each point. In addition, the default for the"lit"
material property is nowFALSE
, so by default filled symbols will match the requested colour regardless of lighting.- Minor fix ups to the vignettes.
- Now uses the
manipulateWidget::combineWidgets
function when putting multiple objects into a pipe. - Now accepts fixed CSS units in width and height for
rglwidget()
. playwidget()
is no longer an S3 generic function.- The configure code to detect freetype has been updated
to use
pkg-config
(code contributed by Dirk Eddelbuettel.) - If a
playwidget()
has been initialized but it can't find therglwidget()
that it is controlling (likely due to a typo somewhere), it now throws an alert message.
- Fixed texture bug introduced in fix in 0.99.16.
- The
persp3d.deldir()
method didn't display labels properly. - When the X11 initialization failed,
rgl
messed up the S3 methods system. (Reported by Gregory Jefferis.) - Probably due to a compiler change,
rgl.bbox()
was returning 0/1 instead of the id of the axes. pch3d()
was failing inrglwidget()
for some shapes. (Reported by Luca Scrucca.)par3d(mouseMode = "none")
was not implemented properly, so appeared to be a no-op.- Selection functions did not work well with subscenes.
- Deleting an object that has been added as a 3D sprite
caused
rgl
to crash. - A number of memory bugs found by
rchk
have been fixed. - Textures specified in global material list (e.g. by being
used in
rgl.*
functions) were not handled properly. (Reported by Ty Tuff.)
- Added support for communication with other widgets
using the
crosstalk
package. See?rglShared
andvignette("WebGL")
for details. - Added the
rglMouse()
function to allow the mouse mode to be changed in a WebGL display.
- Christophe Geuzaine's GL2PS library (used by
rgl.postscript()
) updated to version 1.4.0. - The Pandoc system requirement has been updated to 1.14, as 1.13.1 is no longer sufficient.
- Fixed a bug causing the
rglwidget()
to fail to work in aflexdashboard()
display. - Fixed a bug in Shiny interaction
- Changed WebGL text rendering to avoid overloading browser.
- Sphere rendering within R sometimes showed strange artifacts.
- Record context (
ioslides
,shiny
, etc.) in scene whenrglwidget()
is called. - Allow more than 16 scenes in
html_document
,ioslides_presentation
andslidy_presentation
. useSubscene3d()
now returns the id of the previously active subscene, to make temporary changes more convenient.renderRglwidget()
andrenderPlaywidget()
now have an optional argumentoutputArgs
for use in dynamic R Markdown documents.rglwidget()
now warns if an object has too many vertices.- added an approximation to "polar" mouse controls to WebGL display.
- the
"centers"
attribute now refers to the individual facets of spheres, rather than the whole sphere. Use"vertices"
for that. - Tried to give a more helpful startup error message on macOS.
- Added documentation to
rglwidgetClass
in Javascript. vertexSetter()
can now set plane parameters.- Modified
platform.cpp
so it works with__STRICT_ANSI__
defined. - As many browsers have dropped support for setting line width
in WebGL scenes, this has been redone in
rglwidget()
code using a vertex shader.
Line endings and joins are rounded, not squared as in OpenGL. - The 65535 vertex limit has been removed (at least in browsers that support big indices).
- The requirement that colors being controlled by an
ageControl()
orvertexControl()
be duplicated in the original has been removed.
- The rendering order is changed: now all opaque objects are drawn first, then all transparent objects. Previously this ordering was only done within subscenes, leading to rendering errors when transparent objects in one subscene were drawn before opaque objects in another.
- transparent spheres sometimes showed rendering artifacts because they were not drawn from back to front. (Reported by Atte Tenkanen; original fix improved so nested spheres should now work. WebGL display could still be improved.)
par3dinterp()
did not always choose the best direction for interpolation of theuserMatrix
.- The
toggleWidget()
function didn't work properly in Shiny. - Fixed addition of attribute to NULL.
- Fixed bug where textures or normals caused
readOBJ()
to fail; added support for reading normals and texture coordinates. axes3d("bbox")
didn't send parameters tobbox3d()
.- Fixed examples for
snapshot3d()
andwriteASY()
so that they don't change the working directory.
- Cleaned up configure script.
- Cleaned up dynamic entry points.
- Added
add = FALSE
argument topersp3d.deldir()
. "shiny.tag"
objects are now supported as inputs toplaywidget()
, so thatrglwidget()
values can be wrapped inhtmltools::div()
to set their style.- Added
figWidth()
andfigHeight()
functions for sizingrgl
plots in R Markdown documents.
layout3d()
handled multi-row cells incorrectly. (Reported by Felix Carbonell.)- Fixed a bug in
subsetControl()
, and addedtoggleWidget()
- Renamed the
texture
argument topersp3d.function()
totexcoords
for consistency with other functions, and to avoid a collision with the"texture"
material property. - Fixed bug in scene initialization that sometimes caused it to ignore initial control values.
- Added
plotmath3d()
function, and settext3d()
to use it when necessary.
- Added
fixedSize
argument torgl.sprites()
and related functions. material3d()
now silently ignores attempts to set read-only properties.- Added
setUserShaders()
for user-specified shaders (currently for WebGL only). - Added support for two-sided surfaces in WebGL.
- Added
demo("rglExamples")
to display all the examples in thergl
help in a collection of web pages. This showed up a number of small bugs, which have been fixed. movie3d()
now optionally tries the Rmagick
package first, then the external ImageMagick v7 commandmagick
before tryingconvert
. (The external change suggested by Earl F. Glynn.)par3d()
reports on the version of OpenGL that it sees (as component"glVersion"
).
- Fixed bug in conversion of bounding box decorations
used in
rglwidget()
. addNormals()
gave an error if the mesh it was working with had degenerate triangles or quads. (Reported by Rolf Turner and Graham Griffiths.)- Auto-clipping sometimes changed result vectors into lists.
- The controllers did not recycle some values correctly.
- Fixed bug in initialization of
playwidget()
s. - Fixed some bugs in
pch3d()
(reported by Gina Joue).
- Added
as.mesh3d()
andplot3d.deldir()
andpersp3d.deldir()
methods to allow plotting of surfaces defined by irregular collections of points. - Added
rglToLattice()
andrglToBase()
functions to compute Euler angles for thelattice::wireframe()
,lattice::cloud()
, and base graphicspersp()
functions. - Added
arrow3d()
(based on the function of the same name in theheplots
package). - Added
pch3d()
to give an approximation to plotting symbols usingpch=<number>
in base graphics. - Added support for control of multiple subscenes
to
spin3d()
,par3dinterp()
,play3d()
andmovie3d()
. - Added experimental function
writeASY()
for output in Asymptote format, which will allow inclusion in PDF files. - Added
rgl.attrib.info()
to display information about object attributes. - Merged
rglwidget
code back intorgl
. - Functions that modify the scene now return their
value with class
"rglLowlevel"
or"rglHighlevel"
(using the newlowlevel()
orhighlevel()
functions) to indicate that a low- or high-level plotting function has been called. If the new option"rgl.printRglwidget"
isTRUE
, printing objects of either class will trigger automatic printing of thergl
scene usingrglwidget()
.
- Gave better error when XQuartz is not found, tried for better test.
- Added more information on backgrounds to
scene3d()
to allow them to be used inrglwidget()
. - Now uses forward slashes in
rgl.postscript(fmt = "tex")
generated code. (Thanks to Uwe Ligges for the problem report.) cylinder3d()
now defaults to a rotation minimizing local frame.- Added this NEWS file.
- Added better support for backgrounds.
- Added support for orthographic projections (
FOV = 0
). - Added simple Shiny demo using tabs.
- Added version dependency for
jsonlite
so that the new faster matrix code will be used. - The worker functions used by
subdivision3d()
have been exported for use on their own. - The
rglwidget()
code now supports textures on spheres.
It now uses the same mesh as the one used inside R. (The lack of support was pointed out by Justin McManus.)
- Background clearing was not handled properly. (Thanks to Paul Morse for a bug report on this.)
- Fixed bug in rendering unlit 3D sprites.
- Web browsers only support a finite number of active
WebGL sessions;
rglwidget()
code now works to make more careful use of this finite resource, so that large numbers ofrgl
scenes can be present on a single web page without exhausting it.
- Changed
rgl.pixels()
to attempt to avoid segfault on OSX. (Thanks to Greg Jefferis for testing and workaround.)
- The Mac OS X native windowing system (
aglrgl.so
) has been dropped; it appears not to work in Yosemite and El Capitan. - WebGL code has been moved to the
rglwidget
package (though the functions inrgl
still work).
- If
rgl.init()
fails, continue with theNULL
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.
- A memory leak when drawing semi-transparent objects has been fixed. (Reported by Felix Kuehnl.)
- Bounding box objects sometimes had miscalculated vertices
in
scene3d()
.
- Added
show2d()
to allow a 2d plot on a quadrilateral in a scene. - Added
matrixSetter()
function to allow multiple controls to modify one matrix. - Added
vertexSetter()
function to allow easier access to vertex attributes.
- Made error and warning text more consistent.
- Dropped chunk option
"rgl.keepopen"
; replaced it with"rgl.newwindow"
. - Added
accumulate
argument to the subset WebGL controls. - The
nticks
argument tobbox3d()
was never used and has been removed. Usexlen
,ylen
orzlen
. - Dependencies and imports have been updated.
- Used Jeroen Ooms'
js::jshints()
function to clean up the WebGL Javascript code. - Allowed
values = NULL
inpropertySetter()
andvertexSetter()
to allow code to directly set values. - Shaders are now stored in Javascript strings, not separate script sections.
- Shape centers are now stored by
scene3d()
. - Font family and numeric font number (style) are now returned
by
rgl.attrib()
and are stored byscene3d()
.
- Fixed bug that sometimes prevented textures from displaying.
rgl.bbox()
(and hencebbox3d()
,decorate3d()
,plot3d()
, etc.) did not return the correct id for the bounding box decoration.- Modified configure script to work with OS X 10.11 (suggestion of Brian Ripley).
- Setting
xlen
etc. to zero inbbox3d()
orrgl.bbox()
now (correctly) suppresses tick marks. (Reported by Philipp Angerer.) - Specifying
normals
ortexcoords
in both a"mesh3d"
object and a call toshade3d()
to display it caused an error; now theshade3d()
specified value has priority ifoverride = TRUE
(the default). - When used with clipping on the bounds,
persp3d()
andplot3d()
did not work properly with a shared mouse. (Reported by Marian Talbert.) - Fixed a bug (reported by Dominick Samperi) that caused
vignettes using WebGL code in
knitr
to fail to initialize properly. This required adding thesetupKnitr()
function, which should be called at the start of each vignette. It is not called automatically. - Fixed a bug (reported by Kurt Hornik) that caused
rgl
to fail to compile whenlibfreetype
2.6 was linked. - Fixed a bug in
writePLY()
(reported by Kurt Hornik).
- Added
subsetSlider()
,subsetSetter()
,clipplaneSlider()
,propertySlider()
,ageSetter()
,propertySetter()
,par3dinterpSetter()
andtoggleButton()
functions to output HTML/Javascript controls for WebGL. - Added
hook_rgl()
andhook_webgl()
functions, based on theknitr
functions. - Added clipping regions to
plot3d()
andpersp3d()
. - Export the
GramSchmidt()
function (request of Remko Duursma) - Added
readOBJ()
, with a very limited ability to read OBJ shapefiles.
- If a template file is used in
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.)- User mouse callbacks can now be retrieved within R using
rgl.getMouseCallbacks()
andrgl.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 thereuse
parameter and attribute of the result.- Started a vignette describing user interaction in WebGL.
- Set the class of the main
"canvas"
element inwriteWebGL()
output to"rglWebGL"
. rgl.snapshot()
now evaluates thetop
argument afterfilename
andfmt
, so windows created when those are evaluated don't overlay thergl
window. (Suggestion of Keith Jewell.)writeWebGL()
now includes an argumentcommonParts
, to allow omission of common code in multi-figure displays.- If
template
isNULL
inwriteWebGL()
, no template file is used. - The
persp.function()
method is now smarter about setting default axis labels. - The package now contains a vignette giving an overview of the functions.
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.- The Windows configuration file has been modified to work in R-devel (to become R 3.2.0).
- Fixed bug in
abclines3d()
that caused it to skip lines that passed through the corners of the bounding box. (Reported by Sven Laur.) - The
NULL
device did not handle changes topar3d("windowRect")
properly. - Subscenes with
ignoreExtent = TRUE
were not plotted. - The bounding box calculations now take clipping planes into account.
writeWebGL()
did not display thebboxdeco
properly when working in a subscene.
rgl.snapshot()
now works with theNULL
device (but produces a black snapshot). This allows testing withRGL_USE_NULL
.
- Allowed background of window to show bitmap; added
bgplot3d()
andlegend3d()
functions.
- Reverted misguided changes to
par3d("modelMatrix")
from 0.94. This affectsrgl.projection()
as well. - Fixed bug (introduced in 0.94) causing loss of rectangle showing selection area. (Reported by John Fox and others.)
- The
NULL
device now does not make any spurious OpenGL calls.
- Added function methods for
persp3d()
andplot3d()
, to allow surfaces to be plotted just by specifying the function.
- 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 aNULL
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.
- Added "subscenes", i.e. scenes of objects nested within the main window. This affects a lot of other functions as well, which now act either on a single subscene or on the overall scene.
- Added configurable mouse wheel actions via
par3d()
orrgl.setWheelCallback()
.
- Allowed the coordinates of the viewport to be set.
- Changed the behaviour of
pop3d()
andrgl.pop()
: the type is now ignored ifid
is non-zero. par3d("modelMatrix")
no longer includes the observer translation- The
par3d()
,par3dinterp()
, andspin3d()
functions now have arguments dev and subscene to specify where they apply. - Included a copy of the source to
CanvasMatrix.js
(used bywriteWebGL()
) at the request of the Debian administrators. - Some of the animations have been sped up at the request of CRAN.
- The
NULL
device was not removed from the device list when it was closed. (Reported by Henrik Bengtsson.)
rgl.material()
(for textures),rgl.postscript()
andrgl.snapshot()
now callnormalizePath()
on filenames, so tilde expansion should be supported.- internals are updated to be consistent with macOS 10.9 requirements
- Improved the approximation to the surface normal for degenerate
grids in
surface3d()
andpersp3d()
. (Problem found by Graham Griffiths using polar coordinates; allr=0
points were at the same location.) - The new surface normals are now saved in memory, so
rgl.attrib()
will return them even if they were calculated byrgl
. *scene3d()
now records light settings.
par3d()
could generate an error if an unnamed list was passed in.material3d()
lost settings for textures- fixed a bug in triangulation code: it failed on
locator()
input. - The Aqua support now works again, XQuartz is only needed for command line use in Mac OSX.
- Bounding box calculations for surfaces with user normals were incorrect.
- An array-overrun bug in
rgl.attrib()
showed up inwriteWebGL()
. (Reported by Brian Ripley.)
- Added
clipplanes3d()
function to implement clip planes. (Still only partially implemented.)
- Some cleanup of the declarations (submitted by Karl Millar).
- The FTGL functions were mistakenly added to the
rgl
namespace on some OSX compiles. - Changes have been made to satisfy the stringent requirements of the Solaris compiler.
- most
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. - entry points to the
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.
- the
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 theigraph
package, which does the same, and which also has a Shape class. As a temporary workaround thergl
class has been renamed to"rglShape"
. A fullrgl
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.
- font selection assumed
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.- gl2ps has been updated to version 1.3.8 and support for point and line sizes has been added (bug 4792)
- internal functions
.check3d()
andrgl.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.
- we now check for invalid characters when drawing text using bitmapped fonts (bug 4787)
writePLY()
had errors writing points and lines.
- added
triangulate()
,polygon3d()
,extrude3d()
andturn3d()
for display of shapes based on two-dimensional polygons or curves. - added support for "headless" operation: see help for new
function
rgl.useNULL()
.
- added name of device to result returned from
rgl.cur()
; added functionrgl.dev.list()
to list all open devices. - examples and demos now check
rgl.useNULL()
, and don't run invisible animations.
- fixed formatting of vertex reference numbers in
writeOBJ()
(issue 4732, reported by Alejandro Baranek).
- added
identify3d()
function
- write the
rgl
version into the WebGL file - cleaned up use of
CHECKGLERROR
, so that settingUSE_GLGETERROR
to 1 inR.h
will enable detailed checking
- fixed bbox bug in
writeOBJ()
(reported by Matthias Zeeman),writePLY()
andwriteSTL()
. aspect3d()
(called byplot3d()
) caused the scene to be redrawn, even ifpar3d("skipRedraw")
wasTRUE
.addNormals.mesh3d()
failed on objects when the matrices of triangles or quadrilaterals had zero columns.rotate3d.mesh3d()
did not transform normals properly- the
writeWebGL()
function produced fragment shaders that would not work in some browsers (e.g. Firefox and Chrome with the ANGLE WebGL engine).
- in certain circumstances since 0.93.930, text would fail to appear. (Reported by Karline Soetaert.)
- calling
rgl.material()
before any rendering caused a crash on OSX. (Reported by Dan Tenenbaum.)
- Now handles local (not just directional) lighting. Based on code contributed by Alexander Senger.)
writeWebGL()
handles lighting properly. Based on code contributed by Alexander Senger.
writeWebGL()
did not handlesnapshot=FALSE
properly. (Reported by Yihui Xie.)
- Updated the configure file using autoconf 2.69
- Forced OSX installs to put
/usr/X11/bin
at the head of the path when looking for freetype-config
- Added
writeWebGL()
function, to allow scenes to be viewed in a web browser.
- Removed
rgl.save.texture()
: textures are not saveable! - Added "centers" to the attributes that can be queried, for depth sorted transparent rendering.
- Rearranged declarations for compatibility with gcc 4.7.
- Fixed degenerate (e.g. straight line) cases in
cylinder3d()
.
- Added 3d "sprites" -- shapes that maintain their initial orientation.
- Added "caps" to the end of
cylinder3d()
objects.
- Added support for 3d sprites to
writeWebGL()
.
- Added declaration needed by Solaris.
rgl.light()
andlight3d()
did not return the light ID value.
- remove debugging code from
configure.win
that was causing problems on the CRAN WinBuilder system
- Added
readSTL()
andwriteSTL()
functions - Added
writePLY()
andwriteOBJ()
functions - Added
scene3d()
function - Added
selectpoints3d()
function to select points from the scene.
- Added
expand
argument todecorate3d()
andaxes3d()
- Added
base
argument tospin3d()
result - Added section argument to
cylinder3d()
- Added
res_name="rgl"
andres_class="R_x11"
to theWM_CLASS
property of X11 windows. (Contributed by Philip Johnson.) - Added code to work with R 3.0.0
setHook()
changes - The
rgl
window now handlesESC
key presses. During selection andplay3d()
they abort the process; otherwise they are ignored. - Copied the
R_pretty0()
function from R sources to avoid warning.
writeWebGL()
did not render semi-transparent surfaces properly. (Reported by Robert Esswein.)
- Added
rgl.save.texture()
to get texture from an object.
- Fixed segfault on startup on Windows in MDI mode.
- Added
Sweave()
support through thergl.Sweave()
driver and theSweave.snapshot()
function. - Added
rgl.abclines()
,rgl.planes()
,abclines3d()
andplanes3d()
to draw lines and planes intersecting with the bounding box. - Functions
rgl.attrib.count()
andrgl.attrib()
(and internal functionrgl.getmaterial()
) added to allow objects in the scene to be examined.
- Added declarations for Solaris compatibility (from Brian Ripley)
- Fixed
configure.win
for bi-arch compatibility. Windows installers can setHAVE_PNG
to a non-empty value, andrgl
will look for the libpng files in the defaultLOCAL_SOFT
location when installing. - Added
"depth_mask"
and"depth_test"
material properties, to allow control over how objects are obscured by each other. - Added iterative computation of the bounding box to handle objects like spheres, which need to maintain their apparent shape as the scaling changes.
- Improved the bounding box decoration in two ways: it can now draw the
front faces (to surround the whole graph), and can label edges with pretty
labels.
plot3d()
was modified to use this instead of manually setting axis locations and usingbox3d()
to draw a box, allowing resizable labelled axes. - Removed some unnecessary declarations from
rglmath.h
that were causing problems in an old version of gcc on Solaris. rgl.postscript()
now adjusts the size of text following thecex
setting. Thefont
andfamily
settings are still ignored.- Transparency in material textures was not always rendered properly.
- In OSX, the Carbon system has been replaced by a Cocoa system.
(Code contributed by Adam Strzelecki). For compatibility with the
Windows build system, the new files have been put into
src/osx
. - Hardware antialiasing is now used if the OpenGL driver supports
it. Set
options(rgl.antialias=0)
to disable it. - Updated gl2ps to version 1.3.6
- Bug fix for
divide.mesh3d()
in handling normals. rgl.ids()
did not return all object ids as documented.
- Added detection of 64 bit MacPorts compiler to configure script. (Bug #861)
- Allowed texture coordinates to be specified in mesh objects.
- Updated gl2ps to version 1.3.5
- Should now install using
--merge-multiarch
on Windows
- Added
R_ARCH*
macros toconfigure.win
for Win64 compatibility
- Fixed bug in
rgl.texts()
: zero-length texts argument caused crash. (Reported by Michael Friendly.) - Fixed bad declaration in
rglmath.h
- Added
startTime
argument toplay3d()
andmovie3d()
. - Fixed
configure.ac
as suggested by Jens Elkner. - Updated declarations for libpng 1.4.0 compatibility.
- An off-by-one error caused the
"alpha"
component of the material properties to be messed up. (Bug #809)
- Fixed rounding errors and
Xvfb
errors inrgl.pixels()
examples and demo.
- Add
keepVars
argument tocylinder3d()
, for debugging or special effects. - Add
BugReports
field toDESCRIPTION
.
- Allowed
FOV
to be set to 0, for an orthogonal projection. - Changed
seq(along=...)
toseq_along(...)
.
- Fixed crash when zero-length color vector was used.
- Fixed crash in X11 after closing a window
- Fixed typo in
cylinder3d()
. - Cleaned up bad links in Rd files.
- Added
addNormals()
generic, to add normals for smooth surface rendering. - Added
cylinder3d()
function, to make cylindrical or "tube" plots.
- Added some namespace declarations to the C++, and renamed
math.h
, for compatibility with Sun compilers (contributed by Brian Ripley). - Fixed visibility of some
shade3d()
,wire3d()
andpoints3d()
methods.
- Fixed
material3d("color")
bug introduced in 0.82.
- Added triangle meshes, shape lists, the Platonic solids and a cuboctahedron.
- Added classes
"mesh3d"
and"shapelist3d"
;"qmesh3d"
is only kept for back compatibility.
- Bug fix to stop crashes when material is set before the first window is opened.
- Quick fix for R 2.9.x compatibility, and to remove accidental change
introduced in v0.83 which caused errors on plotting without
open3d()
.
- Don't try to build Carbon driver in 64 bit Mac OS (contributed by Brian Ripley).
- Did not assume OpenGL 1.2 was available in material properties.
- Added numerous error checks.
- Fixed
rgl.pixels()
example for weird displays. - Fixed
demo(stereo)
to add sync in X11: X windows seemed to grab images before they were redrawn. - Rearranged headers for Win64 compatibility (contributed by Alex Chen).
- added
rgl.pixels()
to read the generated image, anddemo("stereo")
to illustrate its use.
- rewrote internal rendering of transparent and anti-aliased shapes, so they will be rendered better when there are several in the same scene
- added material properties
"point_antialias"
, which causes points to be drawn as smooth circles, and"line_antialias"
, which causes lines to be antialiased. - added material parameter
"lwd"
for line width;"size"
now applies only to points. - increased default point size to 3 pixels across.
movie3d()
gains a "type" argument to set the output type, and theconvert
argument is more flexible.rgl.snapshot()
gives more informative error messages when libpng is not available.axis3d()
now usesformat()
rather thanas.character()
to give nicer looking labels.- use R
warning()
to report messages, rather than popups orREprintf
.
- fixed a bug in the bounding box decoration which caused axis labels to be plotted in the wrong place.
- fixed a bug in the Windows driver which caused the standard system font to disappear when justified.
- fixed bug in
open3d()
: "..." was being ignored. - fixed bug in
qmesh3d()
:homogeneous=FALSE
coordinates were not handled properly. - the clipping volume calculation was incorrect when scaling was used.
- corrected the
?rgl
example to display this file.
- converted Freetype font error into warning
rglFonts()
was being set at install time, but it should be set at load time.- fixed configuration problems in OS X
- fixed executable marker on a number of files
- worked around bug(?) in Mac OSX FTGL rendering
- updated FTGL to 2.1.3rc5
- added
mouseCallbacks()
demo, to show R implementations of standard mouse handlers, multiple connected windows, stereo view, etc. - added "silent" argument to
rgl.set()
, to allow temporary changes to focus without changing window labels. - added natural spline extrapolation to
par3dinterp()
.
rgl.pop()
could cause corruption when multiple windows were open.
- rename ChangeLog file to NEWS, as per discussion on R-devel
- add
"windowRect"
topar3d()
parameters to allow window size to be controlled from R.
- put our own
assert()
macro in place to avoid crashing R.
par3d("windowRect")
returned garbage if there was no window open.persp3d()
andplot3d()
sometimes miscalculated ranges involving NAs.select3d()
andrgl.select()
produced a very inefficient test function.
rgl.texts()
andtext3d()
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.
- fix miscalculation of
mouseMatrix
that caused disappearing views. rgl.pop()
was very slow when given a long list of ids.- a workaround for OSX 10.5 OpenGL problems has been incorporated (thanks to mkv22@cam.ac.uk).
- add
play3d()
,movie3d()
,par3dinterp()
, andspin3d()
functions, with flag demo
- rounding error could cause
par3d("userMatrix")
to generate NaNs and fail - workaround for
Xvfb
on macOS problems
- add
rgl.setMouseCallbacks()
to allow user actions
- clean up
#include
s - clean up some calls for SunStudio 12 compiler
- partial changes to avoid crash on macOS with
Xvfb
- change to
rgl_init()
for R 2.6.0 compatibility
- declaration changes for compatibility with R 2.6.0 (from Brian Ripley)
- allowed normals and texture coordinates to be specified in triangles, quads and surfaces
- changes to configure script from Laszlo Kajan and Brian Ripley: should now be much more portable
- removed deprecated OSX font setting calls
- texture properties are now returned by
material3d()
- normals may be specified in
qmesh
objects, but (at present)subdivision3d()
removes them material3d()
now preserves the values of unspecified parameters (as documented, but not previously functioning)clear3d()
can now reset material properties to the defaults, andopen3d()
does this.- minor fix for gcc 4.3 compatibility
- minor fix for R 2.5+ compatibility
- allowed more general surfaces to be plotted by
rgl.surface()
,surface3d()
andpersp3d()
, by specifying matrices for x and y coordinates - added world map texture, used in
example(persp3d)
.
- OSX now builds two libraries, one for AGL, one for X11
- resolve entry points at load time, not call time
- updated gl2ps to version 1.3.2
- tweaked positioning of labels in bounding box decoration
- moved this file (ChangeLog) to inst directory, so it will be installed,
and added code to display it to the
rgl
help topic.
- fixed bug in
rgl.postscript()
in Linux, added text support to it snapshot3d()
wasn't being exported, and snapshots were from the back buffer- fixed bug that could cause crash on shutdown
- allow selection to use any button
- allow NA in primitives, surfaces, texts, and sprites
- report error in OSX if the wrong configure options were used.
persp3d()
partially ignoredadd=TRUE
plot3d.qmesh3d()
did not return result- display was not being updated properly in OSX
- added
grid3d()
, addednticks
argument tobbox3d()
,axis3d()
andaxes3d()
.
- fixed sphere drawing so spheres are spheres regardless of
par3d("scale")
- added
type="s"
toplot3d()
to draw spheres - fixed handling of "..." in axis related functions
- added full MDI support
- removed use of
List
andListIterator
internally - fixed handling of axes and boxes when a coordinate had zero extent
- changed
rgl.viewpoint()
default to be compatible withr3dDefaults
- added id return values to primitives and higher level functions,
and to
rgl.pop()
; addedrgl.ids()
to report on them. - updated gl2ps to version 1.3.1, adding support for svg and pgf output formats.
- minor correction
- added support for png files with palettes, and grayscale pngs with 1, 2 or 4 bits per pixel
- added
"ignoreExtent"
option topar3d()
: objects plotted when this is true are ignored when calculating the bounding box - added
axis3d()
,axes3d()
,box3d()
,mtext3d()
,title3d()
functions fromdjmrgl
for annotating plots. - added
plot3d()
high level plot function - added
material3d()
, which can both set and query material properties; changed most*3d
functions so they leave material invariant across calls. - changed
open3d()
to set background and material defaults - added
aspect3d()
to control the aspect ratio of the bounding box. - added
xAxis
,yAxis
andzAxis
mouse modes, setzAxis
asr3d
default. - added
persp3d()
function - changed error messages to go through
REprintf
in X11 and OSX - fixed segfault if
rgl_init()
failed - converted type of
viewport
argument inuser2window()
andwindow2user()
calls - if the
rgl_init()
call fails, the package will still load with a warning (but most function calls will result in errors). - added
par3d("scale")
to handleaspect3d()
operations internally. - added
ellipse3d()
generic and methods for drawing confidence ellipsoids - added
decorate3d()
to draw all the decorations,plot3d.qmesh3d()
method. - changed zoom to use ratio scale over larger range
- fixed bug causing jump after resize in Mac OSX (and maybe other platforms)
rgl.primitive()
now does sanity checks on inputs
- added
"all"
and"viewpoint"
torgl.clear()
andclear3d()
- added static libpng build support and user customizable prefix (unix)
- used
xyz.coords()
in all functions taking x, y, z coordinates, allowing matrix or dataframe arguments (among others) - added
par3d(skipRedraw=TRUE)
to allow drawing to be done without being rendered - fixed display list memory leak when drawing shapes (e.g. spheres)
- Changes for compatibility with strict enforcement of file naming rules in R 2.3.0.
- simplified build system: uses 'R' build system
- added generic visualization/rendering interface (R3D)
- text justification from 0 to 1
- added primitive type:
linestrip
- fixed
rgl.bringtotop()
, added stay option (win32) - added 4x4 matrix functions from
djmrgl
- added
rgl.user2window()
andrgl.window2user()
functions - added user-selectable mouse handlers
- added selection mouse handler
- added trackball mouse handler
- added z-distance sorted rendering of alpha-blended faces
- added gl2ps patch ( contributed by Albrecht Gebhard )
- added port: native Mac OS X Carbon
- bugfix:
rgl.close()
,rgl.quit()
crashed on X11 occasionally. - generalized
rgl.surface()
to allow surface over any coordinate plane. - added
r3dDefaults
variable to allow user to set defaults - added environment texture-mapping
- DESCRIPTION fix: moved R 1.41 -> R 1.4.1 dependency
- CRAN bugfix: permissions of cleanup fixed.
- removed several redundant semicolons, required by gcc 3.4 ansi-pedantic mode.
- win32: uses R's
zlib
andlibpng
sources - win32: added virtual destructor in
Win32GUIFactory
(removes warning)
- updated
.C()
calls usingPACKAGE="rgl"
- updated
Maintainer.mk
using correctzlib
version - improved dynamic unload using
library.dynam.unload()
- conditional macOS x Darwin code in
.First.lib()
- macOS X 'Panther' G5 fix for OpenGL library loading in .first.lib
- removed
lpng
andzlib
from source tree - support for automatic downloading of
zlib
andlpng
on win32 - added demo directory with several examples using
demo(rgl)
- build bugfix : removed
rgl/src/Makefile
- updated configure to check and setup
LDFLAGS
forOpenGLU
library
- added mouse capturing
rgl.sprites()
'radius' bug fixed- memory leak bugfix: texture objects are now
AutoDestroy
and used throughRef
's - resource management improvement: pixmaps get
free
'd when they become unused e.g. texture objects are created. - no limitations on pixmap sizes
- mipmap support
- support for different texture minification and magnification filters
- updated build system: added
setversion.sh
- with MinGW version 3.0.1 pixmap loading does work
project.mk
,win32.mk
andx11.mk
insrc/build
changed now a single variable MODS will extend.- MinGW build system changed.
rgl.dll
now contains an R compliant Resource information generated by Rperl
script - bug fix: R 1.8.0/win32 does not detach packages when quit
it is safe now to call
rgl_quit()
andlib_quit()
multiple timeswin32lib.cpp
: addeddllmain
that callsrgl_quit()
on process exit - added core support for
devcpp
IDE
- macOS X/X11 port
- manual update
- acquired valid CRAN package status,
R CMD check
runs through with 2 WARNINGS (according tolatex
, andcodoc
) - uploaded to cvs
- configure.ac: X11 library path broken, fixed
x11gui
:glXChooseVisual()
part fixed- code cleanup:
rglview.h
- added:
man/maintainer.Rd
maintainer information
rgl.quads()
:enum
id was broken, fixed ("quads" -> "quadrangles")
- autoconf build system
- moved textures to
inst/
directory - x11 port
win32/vc
: fixed fpu control word precision to remain on 64 bit links withfp10.obj
- changed texture mapping t coordinate for Surface node
- API: added
rgl_init()
,rgl_quit()
: explicit client initialization - added
setup.bat
: build setup for windows - win32 setup: MinGW compiler
- win32 setup: visual c++ compiler through
gui
environment
- modified sphere set
- support R color strings
- use
system.file( <subpath>, package="rgl" )
in examples to retrieve texture files - rewrote R code :
- clear
enum
types - vertex vector datatype (internal representation matrix)
- clear
- added:
rgl.sprites()
- added: fps counter
- added:
autoUpdate
, modified win32 main loop, on hide,autoUpdate
disabled, on show enabled - modified material: added alpha vector
- (mini-thesis release)