Nothing
#'@title Manually construct a mesh
#'
#'@param vertices Nx3 matrix of vertex coordinates..
#'@param indices Nx3 integer matrix, where each row defines a triangle using the
#'vertices defined in `vertices`.
#'@param normals Default `NULL`. Nx3 matrix of normals.
#'@param norm_indices Nx3 integer matrix, where each row defines the normal for a vertex using the
#'normals defined in `normals` for the corresponding triangle in `indices`.
#'Required to be the same number of rows as `indices`.
#'@param texcoords Default `NULL`. Nx2 matrix of texture coordinates.
#'@param tex_indices Nx3 integer matrix, where each row defines the texture coordinates for a triangle
#' using the tex coords defined in `texcoors` for the corresponding triangle in `indices`.
#'Required to be the same number of rows as `indices`.
#' @param material Default `material_list()` (default values). Specify the material of the object.
#'
#'@return List containing mesh info.
#'@export
#'@examples
#'if(run_documentation()) {
#'#Let's construct a mesh from the volcano dataset
#' #Build the vertex matrix
#' vertex_list = list()
#' counter = 1
#' for(i in 1:nrow(volcano)) {
#' for(j in 1:ncol(volcano)) {
#' vertex_list[[counter]] = matrix(c(j,volcano[i,j],i), ncol=3)
#' counter = counter + 1
#' }
#' }
#' vertices = do.call(rbind,vertex_list)
#'
#' #Build the index matrix
#' index_list = list()
#' counter = 0
#' for(i in 1:(nrow(volcano)-1)) {
#' for(j in 1:(ncol(volcano)-1)) {
#' index_list[[counter+1]] = matrix(c(counter,counter+ncol(volcano),counter+1,
#' counter+ncol(volcano),counter+ncol(volcano)+1,counter + 1),
#' nrow=2, ncol=3, byrow=TRUE)
#' counter = counter + 1
#' }
#' counter = counter + 1
#' }
#' indices = do.call(rbind,index_list)
#'
#' #Construct the mesh
#' volc_mesh = construct_mesh(vertices = vertices, indices = indices,
#' material = material_list(type="phong", diffuse="darkred",
#' ambient = "darkred", ambient_intensity=0.2))
#'
#' #Rasterize the scene
#' rasterize_scene(volc_mesh, lookfrom=c(-50,230,100),fov=60,width=1200,height=1200,
#' light_info = directional_light(c(0,1,1)) |>
#' add_light(directional_light(c(1,1,-1))))
#'}
construct_mesh = function(vertices, indices,
normals = NULL, norm_indices = NULL,
texcoords = NULL, tex_indices = NULL,
material = material_list()) {
mesh = list()
mesh$shapes = list()
if(is.null(normals)) {
normals = matrix(0,nrow=0,ncol=3)
}
if(is.null(texcoords)) {
texcoords = matrix(0,nrow=0,ncol=2)
}
if(is.null(norm_indices)) {
norm_indices = matrix(-1,nrow=nrow(indices),ncol=3)
}
if(is.null(tex_indices)) {
tex_indices = matrix(-1,nrow=nrow(indices),ncol=3)
}
mesh$vertices = ray_vertex_data(vertices)
mesh$texcoords = ray_vertex_data(texcoords)
mesh$normals = ray_vertex_data(normals)
mesh$shapes = ray_shape(list(indices = indices,
norm_indices = norm_indices,
tex_indices = tex_indices,
material_ids = rep(0,nrow(indices)),
has_vertex_tex = apply(tex_indices,1,(function(x) all(x != -1))),
has_vertex_normals = apply(norm_indices,1,(function(x) all(x != -1)))))
mesh$materials = list()
mesh$materials[[1]] = list(material)
attr(mesh, "material_hashes") = digest::digest(material)
class(mesh) = c("ray_mesh", class(mesh))
return(mesh)
}
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.