Adult zebrafish 3D rendering
install.packages("imager") install.packages("rgl")
library(imager) library(rgl)
load_zstack <- function(folder) { file_list <- list.files(folder, pattern = "\.tif$", full.names = TRUE) zstack <- lapply(file_list, load.image) zstack <- simplify2array(zstack) # Convert list to array return(zstack) }
folder1 <- "/path/to/folder1" folder2 <- "/path/to/folder2"
zstack1 <- load_zstack(folder1) zstack2 <- load_zstack(folder2)
combined_zstack <- abind::abind(zstack1, zstack2, along = 3) # Combine along the z-axis
open3d()
for (i in 1:dim(combined_zstack)[3]) { slice <- combined_zstack[,,i] surface3d(1:dim(slice)[1], 1:dim(slice)[2], matrix(i, nrow = dim(slice)[1], ncol = dim(slice)[2]), col = gray(slice/max(slice)), add = TRUE) }
rgl.viewpoint(theta = 30, phi = 30, zoom = 0.8)
decorate3d()
rgl.snapshot("3d_figure.png")
library(htmlwidgets) saveWidget(rglwidget(), "3d_figure.html")