hypertidy / quadmesh

raster grid as indexed quad mesh
https://hypertidy.github.io/quadmesh/
25 stars 2 forks source link

auto-expand a palette image to RGB for textures #29

Closed mdsumner closed 5 years ago

mdsumner commented 5 years ago

e.g.

if (raster::nlayers(im) == 1 && length(im@legend@colortable) > 0) {
  im <- setValues(brick(im[[1]], im[[1]], im[[1]]), t(col2rgb(im@legend@colortable)))
}
mdsumner commented 5 years ago

Situation

library(raster)
b <- brick(system.file("external/rlogo.grd", package="raster"))
pct <- rgdal::SGDF2PCT(as(b, "SpatialGridDataFrame"))
r <- setValues(b[[1]], pct$idx-1)
r@legend@colortable <-pct$ct
plot(r)

library(quadmesh)
dem <- setExtent(raster(volcano), extent(0, ncol(volcano), 0, nrow(volcano)))
qm <- quadmesh(dem, texture = setExtent(b, extent(dem)))
rgl::shade3d(qm, lit = FALSE); rgl::bg3d("black");  rgl::aspect3d(1, 1, .2); rgl::rglwidget()

Screenshot 2019-06-04 at 23 53 42

mdsumner commented 5 years ago

In a8bffb0 now only need

quadmesh(dem, texture = palettey_raster)

Full example:

library(raster)
b <- brick(system.file("external/rlogo.grd", package="raster"))
pct <- rgdal::SGDF2PCT(as(b, "SpatialGridDataFrame"))
r <- setValues(b[[1]], pct$idx-1)
r@legend@colortable <-pct$ct
library(quadmesh)
qm <- quadmesh(dem, texture = r)
rgl::shade3d(qm, lit = FALSE); rgl::bg3d("black");  rgl::aspect3d(1, 1, .2); rgl::rglwidget()