- Home /
How I can Converting a Direction Vector to Quaternion rotation?
I have the Cylinder orientation given by the object surface normal vector in terms of 3D vector Vx;Vy;Vz
. and I want to convert it to Quaternion rotation. So I can represent the orientation of the Cylinder in unity 3d.
Suppose we have the angles of rotation with respect to the camera (given by direction cosine):
Vx;Vy;Vz= <60;54;49>
degrees.
How it possible to convert this angles from direction cosine to Quaternion rotation?
Thanks for help.
Answer by robertbu · Feb 04, 2014 at 03:05 PM
I'm fuzzy about what you are looking for here. Say you have a cylinder that is on a surface and parallel to a normal and you move that cylinder to a now position on the surface so you want align with the new normal, you can do:
transform.rotation = Quaternion.FromToRotation(transform.up, hit.normal) * transform.rotation;
Backing off to what you ask for specifically, you need a reference vector. You need to define what represents zero rotation for that vector. So if you are talking about a terrain in which flat is Vector3.up, you can get the rotation:
var q = Quaternion.FromToRotation(Vector3.up, hit.normal);
'hit.normal' is the normal of the surface. Typically it is acquired from casting a ray.
This was very helpful! I used it so that a player can walk around a sphere and stay normal to the sphere. Thank you!
Your answer
Follow this Question
Related Questions
unity3d add float to forward 1 Answer
Transform a Vector by a Quaternion 1 Answer
UI objects move at different speeds on different resolutions 1 Answer
Animation or smooth teleportation 0 Answers
What is wrong with my zipline script? 2 Answers