Obroty sceny (PreviewMouseMove):
Point pt = e.GetPosition(viewport);
angleX += pt.Y - prev.Y;
angleX = Math.Min(Math.Max(-80.0, angleX), 80.0);
angleY += pt.X - prev.X;
PerspectiveCamera camera = (PerspectiveCamera)viewport.Camera;
Quaternion qX = new Quaternion(new Vector3D(1.0, 0.0, 0.0), angleX);
Quaternion qY = new Quaternion(new Vector3D(0.0, 1.0, 0.0), angleY);
lookDirection = new Quaternion(0.0, 0.0, -1.0, 0.0);
lookDirection *= qX;
lookDirection *= qY;
qX.Conjugate();
qY.Conjugate();
qX *= lookDirection;
qY *= qX;
camera.LookDirection = new Vector3D(qY.X, qY.Y, qY.Z);
prev = pt;
Przyjęte oznaczenia:
- viewport to Viewport3D sceny
- prev (typ Point) to poprzednie położenie kursora myszy
- angleX i angleY (typ double) to skumulowane kąty obrotu wokół osi X i Y