人物模型走路的问题,是OGRE,SDK里的例子,一段代码不太懂,求教
if (mKeyDirection != Vector3::ZERO && mBaseAnimID != ANIM_DANCE) { // calculate actually goal direction in world based on player's key directions mGoalDirection += mKeyDirection.z * mCameraNode->getOrientation().zAxis(); mGoalDirection += mKeyDirection.x * mCameraNode->getOrientation().xAxis(); mGoalDirection.y = 0; mGoalDirection.normalise(); Quaternion toGoal = mBodyNode->getOrientation().zAxis().getRotationTo(mGoalDirection); // calculate how much the character has to turn to face goal direction Real yawToGoal = toGoal.getYaw().valueDegrees(); // this is how much the character CAN turn this frame Real yawAtSpeed = yawToGoal / Math::Abs(yawToGoal) * deltaTime * TURN_SPEED; // reduce "turnability" if we're in midair if (mBaseAnimID == ANIM_JUMP_LOOP) yawAtSpeed *= 0.2f; // turn as much as we can, but not more than we need to if (yawToGoal < 0) yawToGoal = std::min<Real>(0, std::max<Real>(yawToGoal, yawAtSpeed)); //yawToGoal = Math::Clamp<Real>(yawToGoal, yawAtSpeed, 0); else if (yawToGoal > 0) yawToGoal = std::max<Real>(0, std::min<Real>(yawToGoal, yawAtSpeed)); //yawToGoal = Math::Clamp<Real>(yawToGoal, 0, yawAtSpeed); mBodyNode->yaw(Degree(yawToGoal)); // move in current body direction (not the goal direction) mBodyNode->translate(0, 0, deltaTime * RUN_SPEED * mAnims[mBaseAnimID]->getWeight(), Node::TS_LOCAL); }