如何在rgl中以淡出效果显示更远的对象?
目前,给出一个三维散点图,R的rgl包以更小的尺寸显示更远的对象。然而,我仍然觉得很难感知物体的深度,特别是在绘制了许多点的时候。在下面的例子中,如果不旋转,就很难看出哪一点在另一点后面。
x <- 1:101
y <- rnorm(101, sd=15)
z <- x + rnorm(101, sd=15)
library(rgl)
plot3d(x,y,z, type='s')但是在下面的图片中,很容易看到图片左边的点离得更远。如何在rgl中实现类似的效果?有一个alpha参数,但这不取决于每个点的深度。

发布于 2020-01-14 02:36:29
OpenGL支持"fog",rgl为您提供了一些控制权,尽管如何获得它还不太明显。但是,如果在大多数函数之前运行它,则这是可行的:
r3dDefaults$material$fog <- TRUE
r3dDefaults$bg$fogtype <- "linear"如果您希望显示器的某些部分褪色,而另一些则不想淡出,请使用fog = FALSE设置非雾气部件的材质。这通常是默认的。
fog类型的选择是c("none", "linear", "exp", "exp2")。对于线性雾,您的示例如下所示:

如果你想让雾只影响点,你可以这样做:
r3dDefaults$material$fog <- FALSE
r3dDefaults$bg$fogtype <- "linear"
plot3d(x, y, z, type = "s", fog = TRUE)这是因为材料特性只应用于数据,而不是轴。我认为这个版本看起来更好,但是你的品味可能会有所不同:

一个限制: fog目前不受rglwidget()生成的rglwidget()代码的支持。
编辑:在评论中指出,调用bgplot3d可以消除迷雾。在rgl版本中,这是一个高达0.100.33的错误,已经修正为0.100.34。有关从哪里得到它,请参见How do I install the latest version of rgl?。
编辑2: -- rgl的开发版本(目前为0.102.4) --现在在WebGL和R中都支持fog;对于fogtype = "exp"和fogtype = "exp2",显示方式有点不同;我认为它实际上看起来更好。
发布于 2020-01-10 09:38:44
如何为alpha生成一个新变量:
x <- 1:101
y <- rnorm(101, sd=5)
z <- x + rnorm(101, sd=15)
a <-11/(order(z) +10)
library(rgl)
plot3d(x, y, z, type = 's',
alpha = a)您可能希望在a <- 11/(order(z) + 10中调整这些值,以获得您喜欢的外观。

https://stackoverflow.com/questions/59678417
复制相似问题