pure index mesh
To be more generally useable quadmesh should provide the index, and allow the triangulated version as an alternative. So a ncol*nrow grid of any kind has two index options: quads, triangles. The quads are implicit against the centres being offset half cell out, but the triangles are trivial.
Both are segment-modulo logic and readily vectorized.
This will simplify turning rectilinear axes and 2D grids of coordinates into meshes, with the obvious AREA vs. POINT distinction.
This turns out to be really simple, this creates rgl mesh just to demo but will work trivially with mesh_plot. Technically there's no need to actually use triangulation code, but I can't handle the index atm
tri <- RTriangle::triangulate(RTriangle::pslg(P = cbind(raster::colFromCell(x, seq_len(raster::ncell(x))),
raster::rowFromCell(x, seq_len(raster::ncell(x))))))
o <- structure(list(vb = t(cbind(coords, raster::values(x), 1)),
it = t(tri$T),
primitivetype = "triangle",
material = list(),
normals = NULL,
texcoords = NULL), class = c("mesh3d", "shape3d"))
rgl::open3d()
cols <- viridis::viridis(56)[scales::rescale(o$vb[3,o$it], c(1, 56))]
#print(str(cols))
rgl::shade3d(o, col = cols)
rgl::aspect3d(1, 1, .0001) ## don't set z-exag to 0 ...
Worked example with quads and triangles in rgl and in grid here: http://rpubs.com/cyclemumner/421078
Use that to apply to stars