/// <summary>
        ///
        /// </summary>
        public override void Render()
        {
            Debug.Assert(null != this.renderer);

            var time = stopWatch.ElapsedMilliseconds * 0.001f;

            rx = (float)(Math.Sin(time * 0.7) * 0.2);
            ry = (float)(Math.Sin(time * 0.3) * 0.1);
            rz = (float)(Math.Sin(time * 0.2) * 0.1);

            camera.Position.X += (this.mouse.X - camera.Position.X) * .05f;
            camera.Position.Y += (-this.mouse.Y - camera.Position.Y) * .05f;

            camera.LookAt(scene.Position);

            root.Traverse(
                child =>
            {
                child.Rotation.X = rx;
                child.Rotation.Y = ry;
                child.Rotation.Z = rz;
            });

            renderer.Render(scene, camera);
        }
Exemple #2
0
        /// <summary>
        ///
        /// </summary>
        public override void Render()
        {
            Debug.Assert(null != this.renderer);

            camera.Position.X += (mouse.X - camera.Position.X) * .05f;
            camera.Position.Y += (-mouse.Y - camera.Position.Y) * .05f;

            camera.LookAt(scene.Position);

            renderer.Render(scene, camera);
        }
        /// <summary>
        ///
        /// </summary>
        public override void Render()
        {
            camera.Position.X += (mouse.X - camera.Position.X) * .05f;
            camera.Position.Y  = Mat.Clamp(camera.Position.Y + (-(mouse.Y - 200) - camera.Position.Y) * .05f, 50, 1000);

            camera.LookAt(scene1.Position);

            renderer.EnableScissorTest(false);
            renderer.Clear();
            renderer.EnableScissorTest(true);

            renderer.SetScissor(0, 0, SCREEN_WIDTH / 2 - 2, SCREEN_HEIGHT);
            renderer.Render(scene1, camera);

            renderer.SetScissor(SCREEN_WIDTH / 2, 0, SCREEN_WIDTH / 2 - 2, SCREEN_HEIGHT);
            renderer.Render(scene2, camera);
        }
Exemple #4
0
        /// <summary>
        ///
        /// </summary>
        public override void Render()
        {
            Debug.Assert(null != this.renderer);

            var time = stopWatch.ElapsedMilliseconds * 0.0015f;

            camera.Position.X += (this.mouse.X - camera.Position.X) * .05f;
            camera.Position.Y += (-this.mouse.Y - camera.Position.Y) * .05f;

            camera.LookAt(scene.Position);

            if (zmesh1 != null && zmesh2 != null)
            {
                zmesh1.Rotation.Y = -time;
                zmesh2.Rotation.Y = -time + (float)(Math.PI / 2.0f);
            }

            if ((float)material.Uniforms["time"]["value"] > 1 || (float)material.Uniforms["time"]["value"] < 0)
            {
                delta *= -1;
            }

            material.Uniforms["time"]["value"] = (float)material.Uniforms["time"]["value"] + delta;

            if (true)
            {
                renderer.Render(sceneRtt, cameraRtt, null, true);
            }
            else
            {
                renderer.Clear();

                // Render first scene into texture

                renderer.Render(sceneRtt, cameraRtt, rtTexture, true);

                // Render full screen quad with generated texture

                renderer.Render(sceneScreen, cameraRtt);

                // Render second scene to screen
                // (using first scene as regular texture)

                renderer.Render(scene, camera);
            }
        }
Exemple #5
0
        /// <summary>
        ///
        /// </summary>
        public override void Render()
        {
            theta += 0.1f;

            camera.Position.X = radius * (float)Math.Sin(Mat.DegToRad(theta));
            camera.Position.Y = radius * (float)Math.Sin(Mat.DegToRad(theta));
            camera.Position.Z = radius * (float)Math.Cos(Mat.DegToRad(theta));
            camera.LookAt(scene.Position);

            // find intersections

            var vector = new Vector3(mouse.X, mouse.Y, 1).Unproject(camera);

            raycaster = new Raycaster(camera.Position, vector.Sub(camera.Position).Normalize());

            var intersects = raycaster.IntersectObjects(parentTransform.Children, true);

            if (intersects.Count > 0)
            {
                if (currentIntersected != null)
                {
                    ((LineBasicMaterial)currentIntersected.Material).Linewidth = 1;
                }

                currentIntersected = intersects[0].Object3D;
                ((LineBasicMaterial)currentIntersected.Material).Linewidth = 5;

                sphereInter.Visible = true;
                sphereInter.Position.Copy(intersects[0].Point);
            }
            else
            {
                if (currentIntersected != null)
                {
                    ((LineBasicMaterial)currentIntersected.Material).Linewidth = 1;
                }

                currentIntersected = null;

                sphereInter.Visible = false;
            }

            renderer.Render(scene, camera);
        }
Exemple #6
0
        /// <summary>
        ///
        /// </summary>
        public override void Render()
        {
            var time = stopWatch.ElapsedMilliseconds * 0.0005;

            sphere.Position.X = (float)Math.Sin(time * 0.7f) * 2000.0f;
            sphere.Position.Y = (float)Math.Cos(time * 0.5f) * 2000.0f;
            sphere.Position.Z = (float)Math.Cos(time * 0.3f) * 2000.0f;

            for (var i = 1; i < scene.Children.Count; i++)
            {
                scene.Children[i].LookAt(sphere.Position);
            }

            camera.Position.X += (this.mouse.X - camera.Position.X) * .05f;
            camera.Position.Y += (-this.mouse.Y - camera.Position.Y) * .05f;
            camera.LookAt(scene.Position);

            renderer.Render(scene, camera);
        }
Exemple #7
0
        /// <summary>
        ///
        /// </summary>
        public override void Render()
        {
            theta += 0.1f;

            camera.Position.X = radius * (float)System.Math.Sin(Mat.DegToRad(theta));
            camera.Position.Y = radius * (float)System.Math.Sin(Mat.DegToRad(theta));
            camera.Position.Z = radius * (float)System.Math.Cos(Mat.DegToRad(theta));
            camera.LookAt(scene.Position);

            // find intersections

            var vector = new Vector3(mouse.X, mouse.Y, 1).Unproject(camera);

            raycaster = new Raycaster(camera.Position, vector.Sub(camera.Position).Normalize());

            var intersects = raycaster.IntersectObjects(scene.Children);

            if (intersects.Count > 0)
            {
                if (INTERSECTED != intersects[0].Object3D)
                {
                    if (INTERSECTED != null)
                    {
                        ((MeshLambertMaterial)INTERSECTED.Material).Emissive = currentHex;
                    }

                    INTERSECTED = intersects[0].Object3D;
                    currentHex  = ((MeshLambertMaterial)INTERSECTED.Material).Emissive;
                    ((MeshLambertMaterial)INTERSECTED.Material).Emissive = Color.Red;
                }
            }
            else
            {
                if (INTERSECTED != null)
                {
                    ((MeshLambertMaterial)INTERSECTED.Material).Emissive = currentHex;
                }
                INTERSECTED = null;
            }

            renderer.Render(scene, camera);
        }
        /// <summary>
        ///
        /// </summary>
        public override void Render()
        {
            Debug.Assert(null != this.renderer);
            Debug.Assert(null != this.mesh);

            if (isUserInteracting == false)
            {
                lon += 0.1f;
            }

            lat   = Math.Max(-85, Math.Min(85, lat));
            phi   = (float)Mat.DegToRad(90 - lat);
            theta = (float)Mat.DegToRad(lon);

            target.X = (float)(500 * Math.Sin(phi) * Math.Cos(theta));
            target.Y = (float)(500 * Math.Cos(phi));
            target.Z = (float)(500 * Math.Sin(phi) * Math.Sin(theta));

            camera.LookAt(target);

            renderer.Render(scene, camera);
        }
Exemple #9
0
        /// <summary>
        ///
        /// </summary>
        public override void Render()
        {
            Debug.Assert(null != this.mesh);
            Debug.Assert(null != this.renderer);

            var time = stopWatch.ElapsedMilliseconds / 6000.0f;

            camera.Position.X = 80 * (float)System.Math.Cos(time);
            camera.Position.Z = 80 * (float)System.Math.Sin(time);

            camera.LookAt(scene.Position);

            for (var i = 0; i < scene.Children.Count; i++)
            {
                var mesh = scene.Children[i];

                mesh.Position.X = (float)System.Math.Sin(time * 4) * i * i * 0.005f;
                mesh.Position.Z = (float)System.Math.Cos(time * 6) * i * i * 0.005f;
            }

            renderer.Render(scene, camera);
        }
        /// <summary>
        ///
        /// </summary>
        public override void Render()
        {
            Debug.Assert(null != this.renderer);
            Debug.Assert(null != this.group);

            var time = stopWatch.ElapsedMilliseconds;

            var ftime = time * 0.001f;

            var rx = (float)(Math.Sin(ftime * 0.7) * 0.5);
            var ry = (float)(Math.Sin(ftime * 0.3) * 0.5);
            var rz = (float)(Math.Sin(ftime * 0.2) * 0.5);

            camera.Position.X += (this.mouse.X - camera.Position.X) * .05f;
            camera.Position.Y += (-this.mouse.Y - camera.Position.Y) * .05f;

            camera.LookAt(scene.Position);

            this.group.Rotation.X = rx;
            this.group.Rotation.Y = ry;
            this.group.Rotation.Z = rz;

            renderer.Render(scene, camera);
        }
        private void Render()
        {
            //GET MAP
            //Create pane
            GeometryModel3D Pane1 = new GeometryModel3D();

            //LOAD IN LOGIC
            MeshGeometry3D paneMesh = MPane(comm.heights);

            Pane1.Geometry = paneMesh;

            //paneMesh.Material
            ImageBrush imagebrush = new ImageBrush();

            //Get Image
            //https://stackoverflow.com/questions/8352787/how-to-free-the-memory-after-the-bitmapimage-is-no-longer-needed
            BitmapImage image  = new BitmapImage();
            FileStream  stream = File.OpenRead(@"texture.bmp");

            image.BeginInit();
            image.CacheOption  = BitmapCacheOption.OnLoad;
            image.StreamSource = stream;
            image.EndInit();
            stream.Close();
            stream.Dispose();

            //Set Image
            imagebrush.ImageSource = image;
            Pane1.Material         = new DiffuseMaterial(imagebrush);
            Pane1.BackMaterial     = new DiffuseMaterial(new SolidColorBrush(Colors.LightGray));

            //GET MARKERS

            //LIGHTS

            DirectionalLight DirLicht1 = new DirectionalLight();

            DirLicht1.Color     = Colors.White;
            DirLicht1.Direction = new Vector3D(-1, -1, -1);

            //REMOVE LATER
            DirectionalLight DirLicht2 = new DirectionalLight();

            DirLicht2.Color     = Colors.White;
            DirLicht2.Direction = new Vector3D(1, 1, 1);

            //MAP
            Model3DGroup modelGroup = new Model3DGroup();

            modelGroup.Children.Add(Pane1);

            foreach (Model3D x in markers.Keys)
            {
                modelGroup.Children.Add(x);
            }

            modelGroup.Children.Add(DirLicht1);
            modelGroup.Children.Add(DirLicht2);

            //Add to visual3d
            ModelVisual3D visuals = new ModelVisual3D();

            visuals.Content = modelGroup;

            //Map
            PerspectiveCamera Camera1 = new PerspectiveCamera();

            Camera1.FarPlaneDistance  = 1000000;
            Camera1.NearPlaneDistance = 50;
            Camera1.FieldOfView       = 45;
            Camera1.Position          = new Point3D(301, 5000, 301);
            Camera1.LookDirection     = new Vector3D(301, -5000, 301);
            Camera1.LookAt(new Point3D(301, 301, 0), 0d);
            Camera1.UpDirection = new Vector3D(0, 1, 0);

            MainViewport.Camera = Camera1;
            MainViewport.Children.Add(visuals);
            MainViewport.CameraRotationMode = CameraRotationMode.Turntable;
            MainViewport.ModelUpDirection   = new Vector3D(0, 1, 0);

            MainViewport.Height = 500;
            MainViewport.Width  = 1000;
            Canvas.SetTop(MainViewport, 0);
            Canvas.SetLeft(MainViewport, 0);
            this.Width  = MainViewport.Width;
            this.Height = MainViewport.Height + 100;
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="openTKcontrol"></param>
        public override void Load(Control openTKcontrol)
        {
            base.Load(openTKcontrol);

            camera          = new PerspectiveCamera(70, openTKcontrol.Width / (float)openTKcontrol.Height, 1, 3000);
            camera.Position = new Vector3(1000, 500, 1000);
            camera.LookAt(new Vector3(0, 200, 0));

            scene = new Scene();
            scene.Add(new GridHelper(500, 100));

            var light = new DirectionalLight(Color.White, 2);

            light.Position = new Vector3(1, 1, 1);
            scene.Add(light);

            var texture = ImageUtils.LoadTexture(@"examples/textures/crate.gif");

            texture.Anisotropy = this.renderer.MaxAnisotropy;

            var geometry = new BoxGeometry(200, 200, 200);
            var material = new MeshLambertMaterial(null)
            {
                Map = texture
            };


//var arrowGeometry = new Geometry();

//var cm = new Mesh(new CylinderGeometry(0, 200, 1000, 12, 1, false));
//cm.Position.Y = 100;
//cm.UpdateMatrix();

//arrowGeometry.Merge((Geometry)cm.Geometry, cm.Matrix);

//var ww = new Mesh(arrowGeometry);


//scene.Add(ww);



            control = new TransformControls(camera, openTKcontrol);
            control.PropertyChanged += control_PropertyChanged;

            mesh = new Mesh(geometry, material);
            scene.Add(mesh);

            control.Attach(mesh);
            scene.Add(control);

            openTKcontrol.KeyDown += (o, args) =>
            {
                switch (args.KeyValue)
                {
                case 81:         // Q
                    control.setSpace(control.space == "local" ? "world" : "local");
                    break;

                case 87:         // W
                    control.SetMode("translate");
                    break;

                case 69:         // E
                    control.SetMode("rotate");
                    break;

                case 82:         // R
                    control.SetMode("scale");
                    break;

                case 187:
                case 107:         // +,=,num+
                    control.setSize(control.size + 0.1f);
                    break;

                case 189:
                case 10:         // -,_,num-
                    control.setSize(Math.Max(control.size - 0.1f, 0.1f));
                    break;
                }
            };
        }
Exemple #13
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="control"></param>
        public override void Load(Control control)
        {
            base.Load(control);

            //

            camera = new PerspectiveCamera(50, control.Width / (float)control.Height, 1, 4000);
            // new OrthographicCamera(-control.Width/20, control.Width / 20, -control.Height / 20, control.Height / 20);//
            this.camera.Position.Z = 50;

            camera.LookAt(new Vector3(0, 0, 0));

            controls = new CamControl(control, camera);

            controls.RotateSpeed = 5;
            controls.ZoomSpeed   = 5;
            controls.PanSpeed    = 2;



            controls.StaticMoving         = true;
            controls.DynamicDampingFactor = 0.4f;

            scene = new Scene();
            scene.Add(camera);

            var material = new LineBasicMaterial {
                VertexColors = ThreeCs.Three.VertexColors
            };

            if (dataList != null)
            {
                foreach (var data in dataList)
                {
                    int segments  = data.Count;
                    var geometry  = new BufferGeometry();
                    var positions = new float[segments * 3];
                    var colors    = new float[segments * 3];

                    for (int i = 0; i < segments; i++)
                    {
                        positions[i * 3 + 0] = data[i].X;
                        positions[i * 3 + 1] = data[i].Y;
                        positions[i * 3 + 2] = data[i].Z * 5;

                        colors[i * 3 + 0] = 0.5f;
                        colors[i * 3 + 1] = 0.5f;
                        colors[i * 3 + 2] = 0.5f;
                    }

                    geometry.AddAttribute("position", new BufferAttribute <float>(positions, 3));
                    geometry.AddAttribute("color", new BufferAttribute <float>(colors, 3));

                    geometry.ComputeBoundingSphere();

                    mesh = new Line(geometry, material);
                    scene.Add(mesh);
                }
            }



            renderer.gammaInput  = true;
            renderer.gammaOutput = true;
        }