Exemplo n.º 1
0
        private void _primaryGrid_MouseMove(object sender, MouseEventArgs e)
        {
            Point newMousePosition = e.GetPosition(_viewport3D1);

            if (e.LeftButton == MouseButtonState.Pressed)
            {
                if (!_primaryGrid.IsMouseCaptured)
                {
                    _primaryGrid.CaptureMouse();
                }

                double deltaX = ModelViewerHelper.ToRad(newMousePosition.X - _oldPosition.X);
                _angleXRad -= deltaX;

                double deltaY = newMousePosition.Y - _oldPosition.Y;
                _angleYDegree += deltaY;

                UpdateCamera();
            }
            else if (e.RightButton == MouseButtonState.Pressed)
            {
                if (!_primaryGrid.IsMouseCaptured)
                {
                    _primaryGrid.CaptureMouse();
                }

                double deltaX = newMousePosition.X - _oldPosition.X;
                double deltaZ = newMousePosition.Y - _oldPosition.Y;

                double distX = _distance * 0.0013 * deltaX;
                double distZ = _distance * 0.0013 * deltaZ;

                _lookAt.X += -distX *Math.Cos(_angleXRad) - distZ * Math.Sin(_angleXRad);

                _lookAt.Z += distX * Math.Sin(_angleXRad) - distZ * Math.Cos(_angleXRad);

                UpdateCamera();
            }

            _oldPosition = newMousePosition;
        }
Exemplo n.º 2
0
        public void UpdateCamera()
        {
            Dispatcher.Invoke(new Action(delegate {
                _angleYDegree = _angleYDegree > 89 ? 89 : _angleYDegree;
                _angleYDegree = _angleYDegree < -89 ? -89 : _angleYDegree;

                double subDistance = _distance * Math.Cos(ModelViewerHelper.ToRad(_angleYDegree));
                _cameraPosition.Y  = _distance * Math.Sin(ModelViewerHelper.ToRad(_angleYDegree));

                _cameraPosition.X = subDistance * Math.Sin(_angleXRad);
                _cameraPosition.Z = subDistance * Math.Cos(_angleXRad);
                _cameraPosition  += _lookAt;

                _primaryCamera.Position      = new Point3D(_cameraPosition.X, _cameraPosition.Y, _cameraPosition.Z);
                _primaryCamera.LookDirection = _lookAt - _cameraPosition;

                if (_modelLight.Content is DirectionalLight)
                {
                    ((DirectionalLight)_modelLight.Content).Direction = _lookAt - _cameraPosition;
                }
            }));
        }