Esempio n. 1
0
        public override void Update(Flat6Engine engine)
        {
            _operationQueue.Clear();

            foreach (var mesh in _meshes)
            {
                if (ShouldMeshSubdivide(mesh, engine.Camera))
                {
                    _operationQueue.Enqueue(new LodOperation(mesh, LodAction.Split));
                }
                if (ShouldMeshMerge(mesh, engine.Camera))
                {
                    _operationQueue.Enqueue(new LodOperation(mesh, LodAction.Merge));
                }
            }

            foreach (var op in _operationQueue)
            {
                switch (op.Action)
                {
                case LodAction.Split:
                    Split(op.Mesh);
                    break;

                case LodAction.Merge:
                    Merge(op.Mesh);
                    break;
                }
            }

            base.Update(engine);
        }
Esempio n. 2
0
        /// <inheritdoc />
        public override void Render(Flat6Engine engine, Camera camera)
        {
            GL.ActiveTexture(TextureUnit.Texture0);
            GL.BindTexture(TextureTarget.Texture2D, Texture.Id);

            GL.ActiveTexture(TextureUnit.Texture3);
            GL.BindTexture(TextureTarget.Texture2D, _textureWater.Id);

            GL.ActiveTexture(TextureUnit.Texture4);
            GL.BindTexture(TextureTarget.Texture2D, _textureNormal.Id);

            GL.ActiveTexture(TextureUnit.Texture5);
            GL.BindTexture(TextureTarget.Texture2D, _textureLights.Id);

            GL.ActiveTexture(TextureUnit.Texture6);
            GL.BindTexture(TextureTarget.Texture2D, _textureClouds.Id);

            var mat = GetTransformation();

            _shader.Uniforms.SetValue("m", mat);
            var outPos = -mat.ExtractTranslation();

            _shader.Uniforms.SetValue("cameraPos", camera.Position);
            _shader.Uniforms.SetValue("lightPos", engine.LightPosition);
            _shader.Uniforms.SetValue("v", camera.GetTransformation());
            _shader.Uniforms.SetValue("p", engine.ProjectionMatrix);

            _shader.Use();
            Mesh.Render(outPos, camera);
            _shader.Release();
        }
Esempio n. 3
0
        public override void Update(Flat6Engine engine)
        {
            var prediction = _satellite.Predict();
            var pos        = prediction.ToSphericalEcef();

            pos /= 100; // 1 engine unit = 10 km

            LocalTransformation = Matrix4.CreateTranslation(pos.ToTk());

            base.Update(engine);
        }
Esempio n. 4
0
        public virtual void Render(Flat6Engine engine, NvgContext context, FrameEventArgs e)
        {
            _fpsGraph.UpdateGraph((float)engine.Window.RenderTime);

            context.FillColor(NanoVg.Rgba(255, 255, 255, 255));
            context.FontFace("engine_mono");
            context.FontSize(18);
            context.TextAlign(NvgAlign.Top | NvgAlign.Left);

            _fpsGraph.RenderGraph(context, 3, 3);
            _tpsGraph.RenderGraph(context, 3, 45);
        }
Esempio n. 5
0
        public override void Update(Flat6Engine engine)
        {
            LocalTransformation = GetTranslationMatrix() * GetRotationMatrix();

            var mv = (LocalTransformation * engine.ProjectionMatrix);

            mv.Transpose();
            _frustum[0].Nums = mv.Row3 + mv.Row0;
            _frustum[1].Nums = mv.Row3 - mv.Row0;
            _frustum[2].Nums = mv.Row3 - mv.Row1;
            _frustum[3].Nums = mv.Row3 + mv.Row1;
            _frustum[4].Nums = mv.Row2;
            _frustum[5].Nums = mv.Row3 - mv.Row2;
        }
Esempio n. 6
0
        public override void Render(Flat6Engine engine, Camera camera)
        {
            var mat = GetTransformation();

            _shader.Uniforms.SetValue("m", mat);
            var outPos = -mat.ExtractTranslation();

            _shader.Uniforms.SetValue("cameraPos", camera.Position);
            _shader.Uniforms.SetValue("lightPos", engine.LightPosition);
            _shader.Uniforms.SetValue("v", camera.GetTransformation());
            _shader.Uniforms.SetValue("p", engine.ProjectionMatrix);

            _shader.Use();
            Mesh.Render(outPos, camera);
            _shader.Release();
        }
Esempio n. 7
0
        public static void EnterSandbox(Flat6Engine engine, Camera camera)
        {
            GL.PushAttrib(ModifiedAttribs);
            GL.Disable(EnableCap.Texture2D);

            GL.LineWidth(LineWidth);
            GL.PointSize(PointRadius);
            GL.Color4(DrawColor);

            GL.PushMatrix();
            GL.Color3(Color.White);
            GL.MatrixMode(MatrixMode.Projection);
            GL.LoadMatrix(ref engine.ProjectionMatrix);
            GL.MatrixMode(MatrixMode.Modelview);
            GL.LoadMatrix(ref camera.LocalTransformation);
        }
Esempio n. 8
0
        public override void Render(Flat6Engine engine, Camera camera)
        {
            var mat = GetTransformation();

            engine.ShaderDefault.Uniforms.SetValue("m", mat);
            var outPos = -mat.ExtractTranslation();

            GL.ActiveTexture(TextureUnit.Texture0);

            engine.ShaderDefault.Use();
            foreach (var mesh in _meshes)
            {
                GL.BindTexture(TextureTarget.Texture2D, _textures[new LeveledTexturePointer(mesh.Level, mesh.Slice, mesh.Ring)].Id);
                mesh.Render(outPos, camera);
            }
            engine.ShaderDefault.Release();
        }
Esempio n. 9
0
        public virtual void Render(Flat6Engine engine, Camera camera)
        {
            if (Mesh == null)
            {
                return;
            }

            GL.ActiveTexture(TextureUnit.Texture0);
            GL.BindTexture(TextureTarget.Texture2D, (Texture ?? engine.TextureDefault).Id);

            var mat = GetTransformation();

            engine.ShaderDefault.Uniforms.SetValue("m", mat);
            var outPos = -mat.ExtractTranslation();

            engine.ShaderDefault.Use();
            Mesh.Render(outPos, camera);
            engine.ShaderDefault.Release();
        }
Esempio n. 10
0
        public override void Update(Flat6Engine engine)
        {
            base.Update(engine);

            _points.Clear();

            var t  = DateTime.UtcNow;
            var xt = TimeSpan.FromMinutes(_satellite.Orbit.Period);
            var dt = TimeSpan.FromMinutes(_satellite.Orbit.Period / 75);

            for (var time = t; time < t + xt; time += dt)
            {
                if (_points.Count == 75)
                {
                    break;
                }

                _points.Add(_satellite.Predict(time).ToSphericalEcef().ToTk() / 100);
            }

            var track = (MeshSatelliteTrack)Mesh;

            track.ComputePoints(Vector3.Zero, _points);
        }
Esempio n. 11
0
 public void Update(Flat6Engine engine, FrameEventArgs e)
 {
 }
Esempio n. 12
0
 public void Render(Flat6Engine engine, NvgContext context, FrameEventArgs e)
 {
     ProcessRenderEvent(engine, context);
 }
Esempio n. 13
0
        public virtual void Update(Flat6Engine engine)
        {
            var transform = GetTransformation().ExtractTranslation();

            BoundingBox.CenterOn(transform);
        }
Esempio n. 14
0
 public void Update(Flat6Engine engine, FrameEventArgs e)
 {
     _tpsGraph.UpdateGraph((float)engine.Window.UpdateTime);
 }
Esempio n. 15
0
 public override void Update(Flat6Engine engine)
 {
     LocalTransformation = engine.Camera.GetTranslationMatrix().Inverted();
     base.Update(engine);
 }
Esempio n. 16
0
 public virtual void Update(Flat6Engine engine)
 {
 }