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(); }
protected static void OnCameraChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e) { ViewportImage viewportImage = ((ViewportImage)obj); viewportImage.RequestRender(); viewportImage.view = Matrix.LookAtRH(viewportImage.CameraPosition, viewportImage.CameraTarget, viewportImage.CameraUpVector); }
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; }