在 rgl 中,是否可以在不再次传递坐标的情况下更改顶点的颜色?

In rgl, is it possible to change the color of vertices without passing the coordinates again?

例如,假设我正在尝试使用 quads3d 绘制一个四边形,并且我已经使用该函数进行了一次调用,并且得到了一个漂亮的彩色四边形。

如果我想绘制相同的四边形,即相同的位置,但颜色不同,我目前所做的是删除旧的四边形并使用新的颜色绘制新的四边形。我有一个用例,其中四边形(实际上是一堆四边形)始终相同,只有颜色发生变化。我可以保存 memory/processing 并以某种方式指示 rgl 仅更改已绘制四边形的颜色吗?

你真的不能那样做。有一些方法可以隐藏 delete/redraw 循环,但 none 实际上可以节省内存或时间。

所以你的一般方法应该是这样的:

library(rgl)

open3d()
xyz <- cbind(x = c(0,1,1,0,2,3,3,2), y = 0, z = c(0,0,1,1))
quads <- quads3d(xyz, col = rainbow(8))
saveSkip <- par3d(skipRedraw = TRUE)
pop3d(id = quads)
quads <- quads3d(xyz, col = terrain.colors(8))
par3d(saveSkip)

这将接近您在不进入 C++ 和修改源代码的情况下获得它的最快速度。