| render_polygons {rayshader} | R Documentation |
Adds 3D polygons to the current scene, using latitude/longitude or coordinates in the reference system defined by the extent object.
render_polygons( polygon, extent, color = "red", top = 1, bottom = NA, data_column_top = NULL, data_column_bottom = NULL, heightmap = NULL, scale_data = 1, parallel = FALSE, holes = 0, lit = TRUE, light_altitude = c(45, 30), light_direction = c(315, 135), light_intensity = 0.3, clear_previous = FALSE )
polygon |
'sf' object, "SpatialPolygon" 'sp' object, or xy coordinates of polygon represented in a way that can be processed by 'xy.coords()'. If xy-coordinate based polygons are open, they will be closed by adding an edge from the last point to the first. |
extent |
A 'raster::Extent' object with the bounding box for the height map used to generate the original map. |
color |
Default 'black'. Color of the polygon. |
top |
Default '1'. Extruded top distance. If this equals 'bottom', the polygon will not be extruded and just the one side will be rendered. |
bottom |
Default '0'. Extruded bottom distance. If this equals 'top', the polygon will not be extruded and just the one side will be rendered. |
data_column_top |
Default 'NULL'. A string indicating the column in the 'sf' object to use to specify the top of the extruded polygon. |
data_column_bottom |
Default 'NULL'. A string indicating the column in the 'sf' object to use to specify the bottom of the extruded polygon. |
heightmap |
Default 'NULL'. Automatically extracted from the rgl window–only use if auto-extraction of matrix extent isn't working. A two-dimensional matrix, where each entry in the matrix is the elevation at that point. All points are assumed to be evenly spaced. |
scale_data |
Default '1'. If specifying 'data_column_top' or 'data_column_bottom', how much to scale that value when rendering. |
parallel |
Default 'FALSE'. If 'TRUE', polygons will be extruded in parallel, which may be faster (depending on how many geometries are in 'polygon'). |
holes |
Default '0'. If passing in a polygon directly, this specifies which index represents the holes in the polygon. See the 'earcut' function in the 'decido' package for more information. |
lit |
Default 'TRUE'. Whether to light the polygons. |
light_altitude |
Default 'c(45, 60)'. Degree(s) from the horizon from which to light the polygons. |
light_direction |
Default 'c(45, 60)'. Degree(s) from north from which to light the polygons. |
light_intensity |
Default '0.3'. Intensity of the specular highlight on the polygons. |
clear_previous |
Default 'FALSE'. If 'TRUE', it will clear all existing polygons. |
#Render the county borders as polygons in Monterey Bay
montereybay %>%
sphere_shade(texture = "desert") %>%
add_shadow(ray_shade(montereybay,zscale=50)) %>%
plot_3d(montereybay,water=TRUE, windowsize=800, watercolor="dodgerblue")
render_camera(theta=140, phi=55, zoom = 0.85, fov=30)
#We will apply a negative buffer to create space between adjacent polygons:
mont_county_buff = sf::st_simplify(sf::st_buffer(monterey_counties_sf,-0.003), dTolerance=0.001)
render_polygons(mont_county_buff,
extent = attr(montereybay,"extent"), top=10,
parallel=TRUE)
render_snapshot()
#We can specify the bottom of the polygons as well. Here I float the polygons above the surface
#by specifying the bottom argument. We clear the previous polygons with `clear_previous = TRUE`.
render_camera(theta=-60, phi=20, zoom = 0.85, fov=0)
render_polygons(mont_county_buff,
extent = attr(montereybay,"extent"), bottom = 190, top=200,
parallel=TRUE,clear_previous=TRUE)
render_snapshot()
#We can set the height of the data to a column in the sf object: we'll use the land area.
#We'll have to scale this value because it's max value is 2.6 billion:
render_camera(theta=-60, phi=60, zoom = 0.85, fov=30)
render_polygons(mont_county_buff,
extent = attr(montereybay,"extent"), data_column_top = "ALAND",
scale_data = 300/(2.6E9), color="chartreuse4",
parallel=TRUE,clear_previous=TRUE)
render_snapshot()
#This function also works with `render_highquality()`
render_highquality(samples=400, clamp_value=10)
rgl::rgl.close()