• Advertisement
Sign in to follow this  

rotating object toward character

This topic is 4208 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

hello everyone :] what i'm trying to do is to rotate an object so that it is always facing the character (kind of sounds like billboarding, but in this case its facing the character instead of the camera) i tried dot product, but that only came up with wierd results resulting in 1000 - 360,000. so then i tried dividing it by 1000, and it just plus's the angle every update..... so maybe the answer i'm looking for is billboarding toward the main character? i would rather just find an angle that i could rotate instead though... thanks in advance --nathan

Share this post


Link to post
Share on other sites
Advertisement

If you are just looking for a rotation around your up axis, you'll need to calculate the vector from the object to the character, normalize it, and with atan2(x,y) you should find the correct angle, in radians naturally.

Yes, this is billboarding

Cheers

Share this post


Link to post
Share on other sites
if you got character position - object position, you have the "lookAt" vector for your object. You can use this vector to rotate your object.

If you do it 2d hypothetically you have a vector (x,y). An you can use tan to calculate the angle.

In 3d you should do something similar, but i cant give you calculations on the fly about that.

Hope this helps a bit though.

Greetings.

EDIT: what he said :) (too late)

Share this post


Link to post
Share on other sites
hey, thanks for the answers :]

its still not really working though....it won't rotate fully, only 90 - 180 degrees usually...

here's the code i'm using:

CVector lookAt = CVector(anglex,angley,anglez); //anglex,angley,anglez calculate lookAt vectors
lookAt.Normalize(); //normalize
float rotateRadians = atan2(lookAt.x,lookAt.y); //gives radians
float realAngle1 = (180.0f * (rotateRadians + 90.0f) / PI); //i think this is right? formula to get degrees instead of radians

anything wrong there?

thanks in advance
--nathan

Share this post


Link to post
Share on other sites
bump
does anyone see anything wrong with the code above in my last post? i still can't and haven't figured out this problem....

thanks in advance
--nathan

Share this post


Link to post
Share on other sites
I can't even figure out if you're trying to do this in 2D or 3D.

Share this post


Link to post
Share on other sites
If you want to rotate around the Y axis, then you should put in X and Z values into the call to atan2(). Also, because atan2() is defined in the mathematical X/Y plane, and you're using a rendering X/Z plane, you may need to negate one of the values, or swap the X/Z when passing to atan2().

An alternative is to not even do rotation, but instead construct a matrix directly. You can do this by putting normalized vectors into a matrix, and orthonormalizing it (google for Gram-Schmidt). The vectors are:

V = normalize(target pos - object pos)
Matrix.X basis: cross(up, V);
Matrix.Y basis: up;
Matrix.Z basis: V;
Matrix: orthonormalize(Matrix)

That's actually how I'd do it, as it deals with the case where the target is above/below the object, too (except for the exactly-above and exactly-below cases, which you need to detect and handle specially if it can happen).

Share this post


Link to post
Share on other sites
Your formula for converting from radians to degrees looks incorrect. Recall that 2PI radians = 360 degrees, therefore, to convert from radians to degrees, take x (where x is your number of radians) and do:

(x * 180) / pi

To go the other way, if x is your number of degrees:

(x * pi) / 180


I haven't looked at the trig very closely, but that conversion seems off. The way you have that set up, you're multiplying 90 by 180. That's a fairly large number.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement