Что делать сейчас? Three.getWorldRotation ушёл - PullRequest
0 голосов
/ 16 марта 2019

В предыдущей версии Three.js я использовал getWorldRotation()

  const sourceObject3D = sourceEntity.object3D

  // Rotation
  {
    const sourceAngle = three.Math.radToDeg(
      sourceObject3D.getWorldRotation().y
    )

    const prevAngle = three.Math.radToDeg(
      targetEntity.object3D.getWorldRotation().y
    )

Теперь это устарело.

Я пытался заменить его на getWorldQuaternion()

var quaternion = new three.Quaternion()
sourceEntity.object3D.getWorldQuaternion( quaternion )
var vector = new three.Vector3()
vector.applyQuaternion( quaternion )
const sourceAngle = three.Math.radToDeg(vector.y)

var tquaternion = new three.Quaternion()
targetEntity.object3D.getWorldQuaternion( tquaternion )
var tvector = new three.Vector3()
tvector.applyQuaternion( tquaternion )

const prevAngle = three.Math.radToDeg(tvector.y)

Однако Quaterion targetEntity всегда равен Quaternion {_x: 0, _y: 0, _z: 0, _w: 1}

Почему это так?И это правильный способ заменить getWorldRotation()

1 Ответ

2 голосов
/ 16 марта 2019

Вращение object3Ds представлено объектом THREE.Euler ( source ).

Ваши вычисления должны работать нормально, если вы используете его вместо Vector3.

var quaternion = new three.Quaternion()
sourceEntity.object3D.getWorldQuaternion( quaternion )

let rotation = new THREE.Euler()
rotation.setFromQuaternion(quaternion)

Проверьте это в моей скрипке .

...