在 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++ 和修改源代码的情况下获得它的最快速度。
例如,假设我正在尝试使用 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++ 和修改源代码的情况下获得它的最快速度。