Exemple #1
0
void Trackball::UpdateBall(double x, double y)
{
	Vec3d toPos = MouseOnSphere(x,y);
	Vec4d newQuat = Qt_FromBallPoints(mStartPos, toPos);
	mStartPos = toPos;
	mCurrQuat = Qt_Mul(newQuat, mCurrQuat);
}
Exemple #2
0
void
ArcBall_Update (void)
{
  int setSize = setSizes[axisSet];
  HVect *set = (HVect *)(sets[axisSet]);

  vFrom = MouseOnSphere(vDown, center, radius);
  vTo = MouseOnSphere(vNow, center, radius);
  if (dragging)
    {
      if (axisSet!=NoAxes)
        {
          vFrom = ConstrainToAxis(vFrom, set[axisIndex]);
          vTo = ConstrainToAxis(vTo, set[axisIndex]);
        }
      qDrag = Qt_FromBallPoints(vFrom, vTo);
      qNow = Qt_Mul(qDrag, qDown);
    }
  else
    {
      if (axisSet!=NoAxes) axisIndex = NearestConstraintAxis(vTo, set, setSize);
    }
  Qt_ToBallPoints(qDown, &vrFrom, &vrTo);
  Qt_ToMatrix(Qt_Conj(qNow), mNow); /* Gives transpose for GL. */
}