/// <summary>
        /// Synchronizes the camera to the controller's current state</summary>
        /// <param name="camera">Camera</param>
        protected override void ControllerToCamera(Camera camera)
        {
            Vec3F lookAt = Camera.LookAt;
            Vec3F up     = Camera.Up;

            if (camera.ViewType == ViewTypes.Perspective)
            {
                QuatF rotation = m_rotation * m_currentRotation;
                rotation = rotation.Inverse;
                Matrix4F transform = new Matrix4F(rotation);

                lookAt = new Vec3F(0, 0, -1);
                up     = new Vec3F(0, 1, 0);
                transform.Transform(ref lookAt);
                transform.Transform(ref up);
            }

            float eyeOffset    = m_distanceFromLookAt;
            float lookAtOffset = 0;

            if (m_distanceFromLookAt < m_dollyThreshold) // do we need to start dollying?
            {
                eyeOffset    = m_distanceFromLookAt;
                lookAtOffset = m_distanceFromLookAt - m_dollyThreshold;
            }

            Camera.Set(
                m_lookAtPoint - (eyeOffset * lookAt),       // eye
                m_lookAtPoint - (lookAtOffset * lookAt),    // lookAt
                up);                                        // up

            base.ControllerToCamera(camera);
        }
示例#2
0
文件: TestQuatF.cs 项目: Joxx0r/ATF
        private void TestToStringWithCulture(CultureInfo culture)
        {
            CultureInfo originalCulture = Thread.CurrentThread.CurrentCulture;
            Thread.CurrentThread.CurrentCulture = culture;
            try
            {
                string listSeparator = culture.TextInfo.ListSeparator;
                string decimalSeparator = culture.NumberFormat.NumberDecimalSeparator;
                var o = new QuatF(1.1f, 2.2f, 3.3f, 4.4f);

                string s = o.ToString(null, null);
                TestToStringResults(o, s, listSeparator, decimalSeparator);

                string s2 = o.ToString();
                Assert.AreEqual(s, s2);

                s = o.ToString("G", culture);
                TestToStringResults(o, s, listSeparator, decimalSeparator);

                s = o.ToString("R", culture);
                TestToStringResults(o, s, listSeparator, decimalSeparator);
            }
            finally
            {
                Thread.CurrentThread.CurrentCulture = originalCulture;
            }
        }
示例#3
0
文件: TestQuatF.cs 项目: zparr/ATF
        private void TestToStringWithCulture(CultureInfo culture)
        {
            CultureInfo originalCulture = Thread.CurrentThread.CurrentCulture;

            Thread.CurrentThread.CurrentCulture = culture;
            try
            {
                string listSeparator    = culture.TextInfo.ListSeparator;
                string decimalSeparator = culture.NumberFormat.NumberDecimalSeparator;
                var    o = new QuatF(1.1f, 2.2f, 3.3f, 4.4f);

                string s = o.ToString(null, null);
                TestToStringResults(o, s, listSeparator, decimalSeparator);

                string s2 = o.ToString();
                Assert.AreEqual(s, s2);

                s = o.ToString("G", culture);
                TestToStringResults(o, s, listSeparator, decimalSeparator);

                s = o.ToString("R", culture);
                TestToStringResults(o, s, listSeparator, decimalSeparator);
            }
            finally
            {
                Thread.CurrentThread.CurrentCulture = originalCulture;
            }
        }
示例#4
0
文件: TestQuatF.cs 项目: Joxx0r/ATF
 private void TestToStringResults(QuatF o, string s, string listSeparator, string decimalSeparator)
 {
     string[] results = s.Split(new[] { listSeparator }, StringSplitOptions.RemoveEmptyEntries);
     Assert.AreEqual(results.Length, 4);
     foreach (string oneFloatString in results)
         Assert.True(oneFloatString.Contains(decimalSeparator));
     Assert.AreEqual(float.Parse(results[0]), o.X);
     Assert.AreEqual(float.Parse(results[1]), o.Y);
     Assert.AreEqual(float.Parse(results[2]), o.Z);
     Assert.AreEqual(float.Parse(results[3]), o.W);
 }
        /// <summary>
        /// Handles mouse-up events</summary>
        /// <param name="sender">Control that raised original event</param>
        /// <param name="e">Event args</param>
        /// <returns>true, if controller handled the event</returns>
        public override bool MouseUp(object sender, MouseEventArgs e)
        {
            if (m_dragging)
            {
                m_dragging        = false;
                m_rotation        = QuatF.Normalize(m_rotation * m_currentRotation);
                m_currentRotation = QuatF.Identity;

                return(true);
            }
            return(base.MouseUp(sender, e));
        }
示例#6
0
文件: TestQuatF.cs 项目: zparr/ATF
 private void TestToStringResults(QuatF o, string s, string listSeparator, string decimalSeparator)
 {
     string[] results = s.Split(new[] { listSeparator }, StringSplitOptions.RemoveEmptyEntries);
     Assert.AreEqual(results.Length, 4);
     foreach (string oneFloatString in results)
     {
         Assert.True(oneFloatString.Contains(decimalSeparator));
     }
     Assert.AreEqual(float.Parse(results[0]), o.X);
     Assert.AreEqual(float.Parse(results[1]), o.Y);
     Assert.AreEqual(float.Parse(results[2]), o.Z);
     Assert.AreEqual(float.Parse(results[3]), o.W);
 }
        private void Track(Point current)
        {
            if (current.X < 0 || current.X > m_width)
            {
                return;
            }

            if (current.Y < 0 || current.Y > m_height)
            {
                return;
            }

            Vec3F currentPoint = ProjectToArcball(current);
            Vec3F i            = Vec3F.Cross(currentPoint, m_firstPoint);
            float r            = Vec3F.Dot(m_firstPoint, currentPoint);

            m_currentRotation = new QuatF(i.X, i.Y, i.Z, r);
        }
        private void Track(Point current)
        {
            if (current.X < 0 || current.X > m_width)
                return;

            if (current.Y < 0 || current.Y > m_height)
                return;

            Vec3F currentPoint = ProjectToArcball(current);
            Vec3F i = Vec3F.Cross(currentPoint, m_firstPoint);
            float r = Vec3F.Dot(m_firstPoint, currentPoint);
            m_currentRotation = new QuatF(i.X, i.Y, i.Z, r);
        }
示例#9
0
        /// <summary>
        /// Handles mouse-up events</summary>
        /// <param name="sender">Control that raised original event</param>
        /// <param name="e">Event args</param>
        /// <returns>true, if controller handled the event</returns>
        public override bool MouseUp(object sender, MouseEventArgs e)
        {
            if (m_dragging)
            {
                m_dragging = false;
                m_rotation = QuatF.Normalize(m_rotation * m_currentRotation);
                m_currentRotation = QuatF.Identity;

                return true;
            }
            return base.MouseUp(sender, e);
        }