3d 加工中的三维运动

3d 加工中的三维运动,3d,processing,3d,Processing,我正在使用Oculus Rift Dk1和Simpleoculus Rift库制作一个处理草图。总的来说,我的问题是,我似乎无法找到一种方法来连接裂缝上的运动和眼睛位置。因此,无论你朝哪个方向看(在裂缝中),都是你向前击球时移动的方向 目前,我已经设置好了,所以你可以在x轴和z轴上移动。(使用translate()和上下左右箭头键。) 我使用库示例中的这段代码来获取我需要的数字,这些数字显示了我所看到的方向 PMatrix3D headOrientationMatrix = oculusRif

我正在使用Oculus Rift Dk1和Simpleoculus Rift库制作一个处理草图。总的来说,我的问题是,我似乎无法找到一种方法来连接裂缝上的运动和眼睛位置。因此,无论你朝哪个方向看(在裂缝中),都是你向前击球时移动的方向

目前,我已经设置好了,所以你可以在x轴和z轴上移动。(使用translate()和上下左右箭头键。)

我使用库示例中的这段代码来获取我需要的数字,这些数字显示了我所看到的方向

 PMatrix3D headOrientationMatrix = oculusRiftDev.headOrientationMatrix();
  headOrientationMatrix.translate( 50, 0, -10 );

  PVector eyePos = new PVector(0, 0, 0);
  PVector dir = headOrientationMatrix.mult(eyePos, null);
当我添加println(dir)时;我得到一对3个数字,看起来像这样:

[ 1.7912731, -11.410956, -49.66469 ]
[ 1.7770205, -13.271997, -49.20057 ]
[ 2.1940613, -14.491295, -48.838394 ]
[ 2.7236567, -14.90203, -48.687893 ]
[ 3.203349, -14.766355, -48.700035 ]
[ 3.7733526, -14.435215, -48.758453 ]
[ 4.232833, -13.569878, -48.96878 ]
[ 4.137532, -13.105787, -49.103153 ]
[ 4.211087, -12.630456, -49.22132 ]
[ 4.1642704, -11.712718, -49.451702 ]
[ 3.9711514, -10.351211, -49.770298 ]
[ 6.6861124, -7.4438334, -49.998856 ]
[ 7.1228933, -7.5860662, -49.917095 ]
如果我向前看,我得到类似于50,0,0的东西,在我身后我得到-50,0,0。当我向右看时,我得到0,0,50,向左看0,0,-50。其他一切都只是不断更新的中间数字

对于栅格移动,在一个简化的定义中-我使用多个PVectors,当你点击向上或向下或向左或向右箭头键时,这些PVectors会添加一个小的数字,这会使我移动

以下是我在网格上移动的代码:

void moveX() {
  //movement for x axis
  if (keyPressed == true) {
    if (key == CODED) {

      if (keyCode == LEFT) {
        walk.x += 1;
      } 
      if (keyCode == RIGHT) {
        walk.x -= 1;
      } 
    }
  }
  if(keyPressed == false){
    walk.x = 0;
  }
}


void moveZ() {
  //movement for z axis
  if (keyPressed == true) {
    if (key == CODED) {
      if (keyCode == DOWN) {
        walk.z -= .5;
      }  
      if (keyCode == UP) {
        walk.z += .5;
      }
    }
  }

  if(keyPressed == false){
    walk.z = 0;

  }
}
然后,我将PVector漫游添加到PVector生成。“繁殖”PVector是启动时草图的3个“繁殖”点。walk PVector只需添加一个数字(或力)即可使其移动

translate( spawn.x, spawn.y, spawn.z);
总之,我似乎不知道如何使用Oculus头套朝着我期待的方向前进。希望这足够清楚。提前感谢所有可能解决这个问题的人,我整天都在挑这个问题


由于我无法发布草图的照片,它基本上是一个3D网格框,您可以在处理过程中移动。

据我所知,您希望始终沿着用户所看到的方向向前移动

使用向量是第一步。您可以使用.add添加的值。因此,基本上对于每一帧:新位置=位置+应用到当前位置的速度。假设位置矢量和速度

location.add(velocity)
由于您将在draw/update中添加“velocity”,因此需要设置一些关于加速度的设置,而不是按一个限制为单击次数的按钮

关于3D,如果你的意思是朝着屏幕的深度前进(比如在电脑游戏中),那将是-Z

从您的代码中,我可以看到您已经有了PVector dir。但是,您还需要一个位置向量,并用位置减去输入,而不是相乘。然后,您可能需要对方向进行规格化(),最后将速度和更改添加到位置:

  PVector eyePos = new PVector(0, 0, 0);
  PVector location = new PVector(0, 0, 0);
  PVector dirOculus = headOrientationMatrix.mult(eyePos, null); //Double check, why you need to mult by null vector.
  PVector dir = PVector.sub(dirOculus, location);

  dir.normalize();
  acceleration = dir;
  velocity.add(acceleration);
  location.add(velocity);
  ----

我希望你明白了这个想法,并能把它放在上下文中

非常感谢你!我开始让它工作,但我将不得不作出一些改变。我真的很感激。就乘法而言,可能与此有关:“pMatrix X3D headOrientationMatrix=oculusRiftDev.headOrientationMatrix();headOrientationMatrix.translate(0,0,-10);”此外,我不太确定这条线发生了什么:-----PVector dirOculus=headOrientationMatrix.mult(eyePos,null);------为什么将eyePos与null相乘?这是怎么回事?最后,当我打印headOrientationMatrix时,我得到以下内容-------processing.core。PMatrix3D@2dd9fc92处理.core。PMatrix3D@4254ecc2处理.core。PMatrix3D@4c01e765处理.core。PMatrix3D@10febedf处理.core。PMatrix3D@44a52b30处理.core。PMatrix3D@37b67f85处理.core。PMatrix3D@2e6e1156 处理.core。PMatrix3D@3c343cea------您在print上看到的是类对象,对于调试,我认为您可以执行类似headOrientationMatrix.print()的操作。您可以在这里看到完整的类文档,并说明它的功能。