public void RotateEyePoint(Vector2 prev, Vector2 current) { Vector2 d = current - prev; double ry = (d.X / 10.0) * (Math.PI / 20); double rx = (d.Y / 10.0) * (Math.PI / 20); CadQuaternion q; CadQuaternion r; CadQuaternion qp; q = CadQuaternion.RotateQuaternion(Vector3d.UnitY, ry); r = q.Conjugate(); qp = CadQuaternion.FromVector(mEye); qp = r * qp; qp = qp * q; mEye = qp.ToVector3d(); qp = CadQuaternion.FromVector(mUpVector); qp = r * qp; qp = qp * q; mUpVector = qp.ToVector3d(); Vector3d ev = mLookAt - mEye; Vector3d a = new Vector3d(ev); Vector3d b = new Vector3d(mUpVector); Vector3d axis = CadMath.Normal(a, b); if (!axis.IsZero()) { q = CadQuaternion.RotateQuaternion(axis, rx); r = q.Conjugate(); qp = CadQuaternion.FromVector(mEye); qp = r * qp; qp = qp * q; mEye = qp.ToVector3d(); qp = CadQuaternion.FromVector(mUpVector); qp = r * qp; qp = qp * q; mUpVector = qp.ToVector3d(); } CalcViewMatrix(); CalcViewDir(); CalcProjectionZW(); }
public void PanCamera(DrawContext dc, Vector2 prev, Vector2 current) { Vector2 d = current - prev; double rx = d.X * (Math.PI / 1000); double ry = d.Y * (Math.PI / 1000); CadQuaternion q; CadQuaternion r; CadQuaternion qp; Vector3d lookv = dc.LookAt - dc.Eye; Vector3d upv = dc.UpVector; q = CadQuaternion.RotateQuaternion(upv, rx); r = q.Conjugate(); qp = CadQuaternion.FromVector(lookv); qp = r * qp; qp = qp * q; lookv = qp.ToVector3d(); Vector3d ev = dc.LookAt - dc.Eye; Vector3d a = new Vector3d(ev); Vector3d b = new Vector3d(upv); Vector3d axis = CadMath.Normal(a, b); if (!axis.IsZero()) { q = CadQuaternion.RotateQuaternion(axis, ry); r = q.Conjugate(); qp = CadQuaternion.FromVector(lookv); qp = r * qp; qp = qp * q; lookv = qp.ToVector3d(); qp = CadQuaternion.FromVector(upv); qp = r * qp; qp = qp * q; upv = qp.ToVector3d(); } dc.SetCamera(dc.Eye, lookv + dc.Eye, upv); }