使用R:如何在单个rgl画布中设置多个3D对象的动画?
我有参与者每只手上都有位置数据的数据: 左: 对: 位置数据已被删除使用R:如何在单个rgl画布中设置多个3D对象的动画?,r,animation,3d,mesh,rgl,R,Animation,3d,Mesh,Rgl,我有参与者每只手上都有位置数据的数据: 左: 对: 位置数据已被删除 pos.x pos.y pos.z 有时t 最初的问题是关于导入OBJ以使用RGL: 我已经猜出那部分了。我已经为开源OBJ文件编写了改进rglmesh框架的函数 我将所需功能放在了网上: 位置数据应该在腕表上捕获,因此我希望能够显示两个或多个3D数据对象,并根据位置/时间数据独立设置每个对象的动画 也就是说,将手视为刚性对象,腕表区域适当移动 我将hand.OBJ文件置于联机状态: 我了解基本的绘图、更新和旋转: libr
pos.x
pos.y
pos.z
有时t
最初的问题是关于导入OBJ以使用RGL:
我已经猜出那部分了。我已经为开源OBJ文件编写了改进rgl
mesh框架的函数
我将所需功能放在了网上:
位置数据应该在腕表上捕获,因此我希望能够显示两个或多个3D数据对象,并根据位置/时间数据独立设置每个对象的动画
也就是说,将手视为刚性对象,腕表区域适当移动
我将hand.OBJ文件置于联机状态:
我了解基本的绘图、更新和旋转:
library(rgl)
mymesh = buildBasicMeshFromOBJ(parseFileOBJ("hand.OBJ"));
open3d()
shade3d(mymesh, col = "pink")
par3d(userMatrix = rotate3d(par3d("userMatrix"), 0.1, 1,0,0))
play3d(spin3d(axis = c(1, 0, 0)))
我的目标是在同一rgl画布上绘制多个对象
e、 g
righthand = mymesh
lefthand = mymesh
head = buildBasicMeshFromOBJ(parseFileOBJ("head.obj"));
并根据每个元素的位置/时间数据,使每个元素作为动画随时间独立移动。目前,头部保持静止,但每只手的移动都基于僵硬的想法,其位置代表手腕
如果在动画进行过程中仍然可以进行鼠标拖动(以更改手和头部周围的三维视图),这将是一个额外的功能。您可以使用类似于
rotate3d
的功能在场景中移动对象。尽管它的名字,它允许相当一般类型的运动:见帮助页
因此,与其使用par3d
移动物体,不如移动物体本身
rgl
不提供修改场景中已经存在的对象的方法(尽管rgl
对象的WebGL显示有…),因此基本思想如下:
- 绘制对象并保存ID(例如,
ID非常有指导意义!谢谢。为什么重复块par3d中的最后一行(skipRedraw=FALSE)?它的用途是什么?一些行
被设置为skipRedraw
。这将停止TRUE
刷新显示。当它被设置回默认值rgl
时,中间行中的所有更改都将立即显示。这将在进行多次更改时停止闪烁。skipRedraw=FALSE
orig1 <- icosahedron3d() id1 <- shade3d(orig1, col = "green") orig2 <- translate3d(orig1, 4, 0, 0) id2 <- shade3d(orig2, col = "blue") repeat { orig1 <- rotate3d(orig1, 0.01, rnorm(1, 1), rnorm(1), rnorm(1)) orig2 <- rotate3d(orig2, 0.05, rnorm(1, -1), rnorm(1), rnorm(1)) par3d(skipRedraw = TRUE) rgl.pop(id = c(id1, id2)) id1 <- shade3d(orig1, col = "green") id2 <- shade3d(orig2, col = "blue") par3d(skipRedraw = FALSE) }
icos <- icosahedron3d() ids <- mfrow3d(1,2) shade3d(icos, col = "red") next3d() shade3d(icos, col = "green")