Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
general [2020/04/10 19:48] paul [Quaternions] |
— (current) | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== General ====== | ||
- | ===== Rotations ===== | ||
- | Unity uses 3 rotation systems. [[https:// | ||
- | |||
- | - Euler Angers - rotation about x, y, z axis | ||
- | - Angle Axis - A normalized Vector3 representing the axis about which to rotate by float angle amount | ||
- | - Quaternions - Angle Axis rotation representation that have been scaled to improve performance. | ||
- | |||
- | |||
- | ==== Calculations ==== | ||
- | |||
- | === Quaternion.FromToRotation() == | ||
- | |||
- | This code snippet calculates the rotation required to rotate an object from a given starting direction (in this case the back of the object given Vector3.back) to a final direction (in this case direction to camera) using the '' | ||
- | <code c#> | ||
- | // Get the direction to a camera | ||
- | Vector3 directionToCamera = Camera.main.transform.position - transform.position; | ||
- | |||
- | transform.rotation = Quaternion.FromToRotation(Vector3.back, | ||
- | </ | ||
- | |||
- | === Quaternion.LookRotation() === | ||
- | '' | ||
- | <code c#> | ||
- | // Get the direction to a camera | ||
- | Vector3 directionToCamera = Camera.main.transform.position - transform.position; | ||
- | |||
- | Quaternion targetRotation = Quaternion.LookRotation(-directionToCamera, | ||
- | |||
- | transform.rotation = Quaternion.FromToRotation(Vector3.back, | ||
- | </ | ||
- | |||
- | ==== Quaternions ==== | ||
- | |||
- | Number primer: [[https:// | ||
- | |||
- | They are in the form of '' | ||
- | |||
- | === Creating Quaternions === | ||
- | <code c#> | ||
- | // This has to be normalized. We generally never use this | ||
- | Quaternion rotation = new Quaternion(0, | ||
- | |||
- | // You usually create a rotation in euler and then convert to quaternion. | ||
- | |||
- | ==== Convertions ==== | ||
- | <code c#> | ||
- | // Convert from Quaternion to Euler: | ||
- | Vector3 inEuler = quaternionRotation.eulerAngles; | ||
- | |||
- | // Convert Euler to Quaternion | ||
- | Quaternion inQuaternion = Quaternion.Euler(inEuler); | ||
- | |||
- | // To Angle-Axis | ||
- | Quaternion randomQuaternion = Random.rotation; | ||
- | float angle; | ||
- | Vector3 axis; | ||
- | |||
- | randomQuaternion.ToAngleAxis(out angle, out axis); | ||
- | |||
- | // And back | ||
- | Quaternion rotation = Quaternion.AngleAxis(angle, | ||
- | </ | ||
- | |||
- | ===== Interpolation ===== | ||
- | Modify one rotation value to another rotation value. | ||
- | |||
- | SLERP - Spherical Linear Interpolation. Two ways of doing this, with a constant velocity or with a smooth variable velocity. | ||
- | |||
- | LERP | ||
- | |||
- | You can use both. |