Каркасный картонный механизм - PullRequest
0 голосов
/ 09 июня 2018

Я хочу иметь возможность двигаться в своем виртуальном мире, оглядываясь и удерживая картонную кнопку, чтобы двигаться.Я пытался в течение 2 часов и не мог понять это.Я действительно не хочу использовать телепортацию в качестве своего решения.

1 Ответ

0 голосов
/ 09 июня 2018

Я бы бросил это в компонент aframe и использовал бы API Three.js:

В init проверим, находится ли мышь вверх или вниз.
В поиске tickвыведите вращение как мировую матрицу, используя extractRotation(mesh.matrix), примените его к переднему вектору, используя direction.applyMatrix4(matrix), и добавьте его к текущей позиции камеры.

AFRAME.registerComponent("foo", {
  init: function() {
    this.mouseDown = false
    this.el.addEventListener("mousedown", (e) => {
      this.mouseDown = true
    })
    this.el.addEventListener("mouseup", (e) => {
      this.mouseDown = false
    })
  },
  tick: function() {
    if (this.mouseDown) {
      let pos = this.el.getAttribute("position")
      let mesh = this.el.object3D
      var matrix = new THREE.Matrix4();
      var direction = new THREE.Vector3(0, 0, -0.1);

      matrix.extractRotation(mesh.matrix);  
      direction.applyMatrix4(matrix)
      direction.add(new THREE.Vector3(pos.x, pos.y, pos.z))
      this.el.setAttribute("position", direction)
    }
  }
})

Рабочая скрипка здесь .

...