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));
Edited by Mind Calamity, 17 June 2013 - 12:35 PM.