Jump to content

  • Log In with Google      Sign In   
  • Create Account


#ActualMind Calamity

Posted 17 June 2013 - 12:35 PM

Hello, so I'm having a problem making my character look down. I'm using the OGRE3D as my rendering engine, and the math facilities it provides.

What I need to do is basically determine the amount of pitch needed to get the bone to the same direction as my crosshair/camera direction.

// mDirection is the direction of the character
Vector3 boneDir = getBoneWorldOrientation(mEntity, mHips) * mDirection;
// This is the direction of the crosshair
 Vector3 dir = mCameraTrans->_getDerivedDirection();
Quaternion rot = boneDir.getRotationTo(dir);

// The code below has been taken from the sinbad character controller and adapted to pitch, instead of yaw
Real pitchToGoal = rot.getPitch().valueDegrees();
Real pitchAtSpeed = pitchToGoal / Ogre::Math::Abs(pitchToGoal) * timeSinceLastUpdate * 100.0f;
if (pitchToGoal < 0) pitchToGoal = std::min<Real>(0, std::max<Real>(pitchToGoal, pitchAtSpeed)); //yawToGoal = Math::Clamp<Real>(yawToGoal, yawAtSpeed, 0);
else if (pitchToGoal > 0) pitchToGoal = std::max<Real>(0, std::min<Real>(pitchToGoal, pitchAtSpeed)); //yawToGoal = Math::Clamp<Real>(yawToGoal, 0, yawAtSpeed);
 mHips->pitch(Degree(pitchToGoal));
The above code has been adapted from multiple sources and somewhat works, but only on one axis. I know I'm probably doing some horrible things to the math related to this, so I appreciate any tips and pointers. :)
 
Unfortunately I'm not that good with Vector/Quaternion math, and I get the following bug:
Here's a YouTube video showasing the problem (I didn't find a way to embed it into the post): https://www.youtube.com/watch?v=IwUpzEE3uwI
It seems to work properly on +Z, it's shaking a bit on -Z, and it just continues to rotate on +X/-X.
 
I also posted on the OGRE3D forums, and am mirroring the post here to increase my chance of a reply.
 
For any future Googlers that happen to stumble upon this post, here's the link just in case: http://ogre3d.org/forums/viewtopic.php?f=2&t=78213
 
Note to moderators: If you think the Math and Physics is more appropriate, please move it there. smile.png

#1Mind Calamity

Posted 17 June 2013 - 12:33 PM

Hello, so I'm having a problem making my character look down. I'm using the OGRE3D as my rendering engine, and the math facilities it provides.

 

What I need to do is basically determine the amount of pitch needed to get the bone to the same direction as my crosshair/camera direction.

 

I'm going to mirror my post on the OGRE3D forums below:

// mDirection is the direction of the character
		Vector3 boneDir = getBoneWorldOrientation(mEntity, mHips) * mDirection;
		// This is the direction of the crosshair
 		Vector3 dir = mCameraTrans->_getDerivedDirection();
		Quaternion rot = boneDir.getRotationTo(dir);

		// The code below has been taken from the sinbad character controller and adapted to pitch, instead of yaw
		Real pitchToGoal = rot.getPitch().valueDegrees();
 		Real pitchAtSpeed = pitchToGoal / Ogre::Math::Abs(pitchToGoal) * timeSinceLastUpdate * 100.0f;
		if (pitchToGoal < 0) pitchToGoal = std::min<Real>(0, std::max<Real>(pitchToGoal, pitchAtSpeed)); //yawToGoal = Math::Clamp<Real>(yawToGoal, yawAtSpeed, 0);
		else if (pitchToGoal > 0) pitchToGoal = std::max<Real>(0, std::min<Real>(pitchToGoal, pitchAtSpeed)); //yawToGoal = Math::Clamp<Real>(yawToGoal, 0, yawAtSpeed);
 		mHips->pitch(Degree(pitchToGoal));
Unfortunately I'm not that good with Vector/Quaternion math, and I get the following bug:
 
Here's a YouTube video showasing the problem (I didn't find a way to embed it into the post): https://www.youtube.com/watch?v=IwUpzEE3uwI
It seems to work properly on +Z, it's shaking a bit on -Z, and it just continues to rotate on +X/-X.
 
I also posted on the OGRE3D forums, and am mirroring the post here to increase my chance of a reply.
 
For any future Googlers that happen to stumble upon this post, here's the link just in case: http://ogre3d.org/forums/viewtopic.php?f=2&t=78213
 
Note to moderators: If you think the Math and Physics is more appropriate, please move it there. :)

 


PARTNERS