Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用R:如何在单个rgl画布中设置多个3D对象的动画?_R_Animation_3d_Mesh_Rgl - Fatal编程技术网

使用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")