# Using Quaternions in Panda3d

Hi to all,
I’ve noticed that there aren’t any proper tutorials on how to use quaternions with panda3d. Calling this page to learn more also yields a 404 error:
quat reference?
All I’ve found are calls to getQuat and setQuat, though it’s not clear to me what exactly to do with them. For example, say I wanted to set an object’s Heading so that it looks to it’s left or right. I would do the same by calling:

``````nodepath.setH(nodepath,90)
nodepath.setH(nodepath,-90)
``````

Same for its P and R to make it look different directions etc. So how would I do the same with quaternions? Basically an introduction as to how to properly use quaternions (use, not understand, for all those who are about to tell me they’re impossible to comprehend ) in panda3d? The forum discussions aren’t that helpful and are kinda overly-specific.I’m sure someone familiar with them could explain their use with a few simple examples in a few lines here.

Thank you so much in advance.
(P.s. not sure if this is a scripting issue, since it does pertain to writing scripts, or more of a general discussion issue, since it’s a general inquiry of sorts as well.)

Perhaps you were trying to visit an old API-reference page (from before the move to the new website)?
If you go here, and search for `quat`, you will probably first find the namespace page and eventually you should end up here.

To get a quaternion that describes the rotation you want, there are several ways, but the easiest is probably to use its `set_hpr` method:

``````quat = Quat()
quat.set_hpr((90., 0., 0.))
``````

The same could be accomplished using a call to `set_from_axis_angle` (in this particular case you know that the rotation happens about the Z-axis, so the axis vector is `Vec3(0., 0., 1.)` or just `Vec3.up()`, but for a more general orientation the axis vector is harder to determine):

``````quat.set_from_axis_angle(90., Vec3.up())
``````

Finally you can also convert a matrix to a quaternion:

``````rotation_mat = Mat4.rotate_mat(90., Vec3.up())
quat = Quat()
quat.set_from_matrix(rotation_mat)
``````

and the other way around:

``````quat.extract_to_matrix(rotation_mat)
``````

Then you just pass that quaternion into the call to `NodePath.set_quat()`.

That should get you started !

Thanks for clearing up some mysteries.