Exemple #1
0
        protected override void Draw()
        {
            // Ensure transforms are updated and clear; otherwise leave to Model3D tree
            GraphicsDevice.Clear(ClearFlags.Target | ClearFlags.ZBuffer, new Color4(1.0f, 1.0f, 1.0f, 1.0f), 1.0f, 0);
            GraphicsDevice.BeginScene();
            float aspect = (float)GraphicsDevice.Viewport.Width / (float)GraphicsDevice.Viewport.Height;

            switch (this.ViewPort3D.ProjectionType)
            {
            case ProjectionType.Perspective:
                projection = Matrix.PerspectiveFovRH(fov, aspect, 0.01f, 10000f);
                break;

            case ProjectionType.Orthogonal:
                float width  = (float)this.Models.Select(m => m.Bounds.Maximum.X).Max() * aspect;
                float height = (float)this.Models.Select(m => m.Bounds.Maximum.Y).Max();
                projection = Matrix.OrthoRH(width / this.Scale, height / this.Scale, 1, 100);
                break;
            }

            view  = Matrix.LookAtRH(CameraPosition, CameraTarget, CameraUpVector);
            world = Matrix.Identity;
            // ENDTODO
            GraphicsDevice.SetTransform(TransformState.Projection, ref projection);
            GraphicsDevice.SetTransform(TransformState.View, ref view);
            GraphicsDevice.SetTransform(TransformState.World, ref world);

            foreach (Model3D model in this.Models)
            {
                model.Draw();
            }
            GraphicsDevice.EndScene();
            GraphicsDevice.Present();
        }
Exemple #2
0
        protected static void OnCameraChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
        {
            ViewportImage viewportImage = ((ViewportImage)obj);

            viewportImage.RequestRender();
            viewportImage.view = Matrix.LookAtRH(viewportImage.CameraPosition, viewportImage.CameraTarget, viewportImage.CameraUpVector);
        }
Exemple #3
0
        private void Draw()
        {
            _manager.Clear(Color.Black);

            var context = _manager.Device.ImmediateContext;

            var eyePosition = Vector3.Transform(new Vector3(0, (float)_distSum / 3f, 0), _viewRotation);

            _view = Matrix.LookAtRH(eyePosition, new Vector3(0, 0, 0), Vector3.UnitZ);

            var time = (float)_clock.Elapsed.TotalSeconds;

            float dt        = _timeDelta;
            int   stepsTodo = (int)Math.Floor((time - _prevGameSec) / dt);

            while (stepsTodo-- > 0)
            {
                float   r   = Math.Max(0.05f, _position.Length());
                Vector3 acc = _position * (-1f / r / r / r);
                _velocity = _velocity + acc * dt;
                _position = _position + _velocity * dt;
            }

            SetWorld(context, Matrix.Translation(_position * _scale) * Matrix.Translation(0, 0, 3));
            _sphere.Draw();

            SetWorld(context, Matrix.Translation(0f, 0f, -4f));
            _plane.Draw();

            SetWorld(context, Matrix.Translation(0, 0, 3));
            _sun.Draw();

            _manager.Present();

            _prevGameSec = time;
        }