Three.js How To Use Quaternion To Rotate Camera
Solution 1:
Slerp is quite easy. It takes 4 parameters:
targetRotation
the actual camera rotationdestinationRotation
the object rotationdestinationRotation
new quaternion which will be the new camera rotationpercentOfRotation
this parameter is playground, I'm using 0.07 here right now, could be value between 0 (0%) and 1 (100%)
This is my rotation method:
var qm = new THREE.Quaternion();
THREE.Quaternion.slerp(camera.quaternion, destRotation, qm, 0.07);
camera.quaternion = qm;
camera.quaternion.normalize();
Hopefully this will help you. And don't bother I also worked some weeks on the perfect camera following.
Solution 2:
You can use the method applyQuaternion from ThreeJs
const quaternion = new THREE.Quaternion(obj.position.x, obj.position.y, obj.position.z, 1);
camera.applyQuaternion(quaternion); // Apply Quaternion
camera.quaternion.normalize(); // Normalize Quaternion
Solution 3:
I think this line wont work:
obj.quaternion = new THREE.Quaternion(obj.position.x, obj.position.y, obj.position.z, 1);
You need to set
obj.useQuaternion = true
After adding object to scene, when you rotate it will be automatically applied to obj.quaternion
.
The second point is you should apply the object to your controls and not the camera. Because you want to control the object and not the camera?
Solution 4:
This is how I've done it :
- Get the current quaternion of your camera (initialQuaternion)
- Create a clone of your camera
- Make the clone look at the target using the lookAt method
- The thing is, the lookAt method of the camera will actually make it look AWAY from the target, so you have two options :
- Either use the lookAt method directly, then invert the rotation
- Or compute the position the target should have so that when looking away from it, you actually look in the correct direction
- Get the new quaternion of the clone (targetQuaternion)
- By using an animation loop, do a slerp between the initialQuaternion and the targetQuaternion
Solution 5:
I have tried using it:
var newQuaternion = new THREE.Quaternion();
THREE.Quaternion.slerp(camera.quaternion, obj.quaternion, newQuaternion, 0.01);
camera.quaternion = newQuaternion;
camera.quaternion.normalize();
camera.matrixAutoUpdate();
However, I have failed to get the desired outcome. I know it is a fairly old post but I would be happy if someone could respond. I didn't see any other relevant posts other than this so really hoping for someone to respond.
Here is my problem in detail: Rotate camera to look at Selected object in three.js
Post a Comment for "Three.js How To Use Quaternion To Rotate Camera"