gpt4 book ai didi

html - 将带有线框的 3D 表面从 R 导出到 HTML

转载 作者:行者123 更新时间:2023-11-28 01:05:56 24 4
gpt4 key购买 nike

{rgl} 包中的 writeWebGL 函数可用于将交互式 3D 绘图导出为 HTML(参见下面的示例)。

    require(rgl)
jet.colors <-colorRampPalette(c("#00007F", "blue", "#007FFF", "cyan",
"#7FFF7F", "yellow", "#FF7F00", "red", "#7F0000"))
colorzjet <- jet.colors(100)
data(volcano)
z <- 5 * volcano # Exaggerate the relief
x <- 10 * (1:nrow(z)) # 10 meter spacing (S to N)
y <- 10 * (1:ncol(z))

open3d()
bg3d("white")
material3d(col="black")
persp3d(x, y, z, col = colorzjet[ findInterval(z, seq(min(z), max(z), length=100))], aspect="iso",axes = TRUE, box = FALSE, smooth=FALSE,lit=FALSE,front="fill")
surface3d(x, y, z, front = "lines",col="black", lit=FALSE)

browseURL(paste("file://", writeWebGL(dir=file.path("C:/", "webGL"), width=700), sep=""))

但是,它目前不支持线框或点渲染,这意味着 3D 表面将导出为没有可见边缘的多边形。

有人知道解决办法吗?我希望我的 HTML 文件显示 3D 表面上每个小平面的边缘。

最佳答案

您需要使用低级函数绘制点或边。做点相当容易:

id <- surface3d(x, y, z, front = "lines",col="black", lit=FALSE)
vertices <- rgl.attrib(id, "vertices")
points3d(vertices)

制作线框比较复杂,因为您需要连接正确的顶点。这里有几个函数可以做到这一点。

surfaceData <- function(id) {
vertices <- rgl.attrib(id, "vertices")
dim <- rgl.attrib(id, "dim")
array(vertices, c(dim, 3))
}

surface2lines <- function(data, ...) {
vertices <- NULL
for (i in seq_len(dim(data)[1]))
vertices <- rbind(vertices, data[i,,], c(NA, NA, NA))
for (j in seq_len(dim(data)[2]))
vertices <- rbind(vertices, data[,j,], c(NA, NA, NA))
lines3d(vertices, ...)
}

您调用 surfaceData(id) 来提取曲面的顶点,然后调用该数组上的 surface2lines() 来绘制线条。例如,

id <- surface3d(x, y, z, front = "lines",col="black", lit=FALSE)
d <- surfaceData(id)
open3d()
surface2lines(d)

从您的数据中给出这张图片:

wireframe image

你可以在表面上过度绘制它;你可能需要玩depth_test 属性让它显示在表面之上。

关于html - 将带有线框的 3D 表面从 R 导出到 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39782976/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com