Exemple #1
0
	void Matrix::TurnToVertical (Vector& vPoint, float fAngle)
	{
		Vector vToPoint = vPoint - GetPos();
		vToPoint.fComp[0] = 0;
		Vector vForward = GetZ();
		vForward.fComp[0] = 0;
		if (vToPoint == Vector (0,0,0) || vForward == Vector (0,0,0))
			return;

		// if the angle of rotation makes you rotate past the target point, face the target point instead
		float fFinalAngle = fAngle;
		float fAngleToPoint = vToPoint.AngleTo (vForward);
		if (fAngleToPoint < fAngle)
			fFinalAngle = fAngleToPoint;

		// find out whether to rotate left or right
		float yDot = -(GetY() * vToPoint);
		if (yDot < 0)
			fFinalAngle = -fFinalAngle;

		// now for the punchline
		RotateX (fFinalAngle);
	}