Jump to content

  • Log In with Google      Sign In   
  • Create Account

We're offering banner ads on our site from just $5!

1. Details HERE. 2. GDNet+ Subscriptions HERE. 3. Ad upload HERE.


Quaternion Rotation along plane surfaces (maintaining Pitch/Yaw/Roll)


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
1 reply to this topic

#1 OneEyed   Members   -  Reputation: 143

Like
0Likes
Like

Posted 24 December 2013 - 05:47 PM

Hello,

 

I'm using Unity 4, and I'm trying to orient my player camera with the surface normal of the ground they are standing on.

 

After calculating the ground normal, I am doing this:

var groundNormal = getGroundNormal();
var turnAngle = Input.GetAxis("Horizontal") * 2.25;

var newRotation = Quaternion.AngleAxis(turnAngle, groundNormal);

Quaternion.Slerp( oldRotation, newRotation, Time.deltaTime );


The quaternion will orient and rotate to the updirection partially, because the pitch and roll do not align perpendicular to the surface, like when we are on the default (0,1,0) ground normal.

 

I can maintain a perfect matrix transformation using a function called "ClipVelocity" that will reorient my direction vectors to be perpendicular to my ground normal, but I do not know how to translate this to quaternions.

 

How can I rotate in such a way that pitch and roll orient correctly to any plane orientation (for upside down loops, etc.)?


Edited by OneEyed, 24 December 2013 - 05:50 PM.


Sponsor:

#2 Álvaro   Crossbones+   -  Reputation: 13688

Like
0Likes
Like

Posted 24 December 2013 - 09:18 PM

The question is not completely clear to me, but if what you are trying to do is take a particular rotation and find the "closest" rotation to it that sends the vector (0,1,0) to the normal of the surface, you can do that by using the formula in this stackoverflow thread.

EDIT: The way you would use that formula is to compute where (0,1,0) is being mapped to by your current rotation, then use the formula to compute a rotation that maps that vector to the surface normal, then modify the current rotation by composing in the computed rotation (in whatever order it has to be done).

Edited by Álvaro, 24 December 2013 - 09:30 PM.





Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS