#three.js #aframe
#three.js #aframe
Вопрос:
В предыдущей версии 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)
Однако кватерион targetEntity всегда Quaternion {_x: 0, _y: 0, _z: 0, _w: 1}
Почему это должно быть? И это правильный способ заменить getWorldRotation()
Ответ №1:
Вращение object3Ds представлено THREE.Euler
объектом (источником).
Ваши вычисления должны работать нормально, если вы используете его вместо Vector3.
var quaternion = new THREE.Quaternion()
sourceEntity.object3D.getWorldQuaternion( quaternion )
let rotation = new THREE.Euler()
rotation.setFromQuaternion(quaternion)
Проверьте это в моей скрипке.