Пример #1
0
        public override void LoadView()
        {
            var camera = CameraPosition.FromCamera(latitude: kCameraLatitude, longitude: kCameraLongitude, zoom: 10);

            mapView   = MapView.FromCamera(frame: CGRect.Empty, camera: camera);
            this.View = mapView;

            // Set up the cluster manager with default icon generator and renderer.
            var iconGenerator = new GMUDefaultClusterIconGenerator();
            var algorithm     = new GMUNonHierarchicalDistanceBasedAlgorithm();
            var renderer      = new ClusterRenderer(mapView: mapView, iconGenerator: iconGenerator)
            {
                Delegate = this
            };

            clusterManager = new GMUClusterManager(mapView: mapView, algorithm: algorithm, renderer: renderer);

            // Add people to the cluster manager.
            foreach (Person person in randomPeople())
            {
                clusterManager.AddItem(person);
            }

            // Call cluster() after items have been added to perform the clustering and rendering on map.
            clusterManager.Cluster();
        }
Пример #2
0
 public ClusterManager(Context context, GoogleMap map, MarkerManager markerManager)
 {
     mMap            = map;
     mMarkerManager  = markerManager;
     mClusterMarkers = markerManager.newCollection();
     mMarkers        = markerManager.newCollection();
     mRenderer       = new DefaultClusterRenderer <T>(context, map, this);
     mAlgorithm      = new PreCachingAlgorithmDecorator <T>(new NonHierarchicalDistanceBasedAlgorithm <T>());
     mClusterTask    = new ClusterTask(this);
     mRenderer.onAdd();
 }
Пример #3
0
        private void SetClusterManager()
        {
            var iconGenerator = new GMUDefaultClusterIconGenerator();
            var algorithm     = new GMUNonHierarchicalDistanceBasedAlgorithm();
            var renderer      = new ClusterRenderer(mapView, iconGenerator)
            {
                Delegate = this
            };

            clusterManager = new GMUClusterManager(mapView, algorithm, renderer);
            RandomPeople();
            clusterManager.Cluster();
        }
Пример #4
0
        public override void Init()
        {
            base.Init();

            scene = new Scene
            {
                new Environment
                {
                    SunlightDir = glm.normalize(new vec3(-1.0f, -1.0f, 0.0f))
                },

                new DebugRenderer(),

                new Node("Camera", new vec3(-8.0f, -5.0f, 0), glm.radians(0, 90, 0))
                {
                    new Camera
                    {
                        Fov = glm.radians(60)
                    },
                },

                new Node("Mesh")
                {
                    new StaticModel
                    {
                        ModelFile = "models/sibenik/sibenik_bubble.fbx"
                    },
                },
            };

            camera = scene.GetComponent <Camera>(true);
            var staticModel = scene.GetComponent <StaticModel>(true);

            BoundingBox aabb = staticModel.WorldBoundingBox;

            SetupLights(scene, aabb, 10 /*24*/, lights);

            //clusterRenderer = new ClusterForwardRenderer();
            clusterRenderer = new HybridRenderer();
            MainView.Attach(camera, scene, clusterRenderer);
        }
Пример #5
0
        public override void Init()
        {
            scene = new Scene
            {
                new Environment
                {
                    SunlightDir = glm.normalize(new vec3(-1.0f, -1.0f, 0.0f))
                },

                new Node("Camera", new vec3(1200, 35, -75), glm.radians(0, 270, 0))
                {
                    new Camera
                    {
                        NearClip = 1.0f,
                        FarClip  = 3000.0f,
                    },
                },

                new Node("sponza")
                {
                    new StaticModel
                    {
                        ModelFile = "Models/crysponza_bubbles/sponza.obj"
                    },
                },
            };

            camera = scene.GetComponent <Camera>(true);
            var staticModel = scene.GetComponent <StaticModel>(true);

            BoundingBox aabb = staticModel.WorldBoundingBox;

            Lighting.SetupLights(scene, aabb, 1024, lights);

            //clusterRenderer = new ClusterForwardRenderer();
            clusterRenderer = new HybridRenderer();
            MainView.Attach(camera, scene, clusterRenderer);
        }
    private void DrawClusterGizmo(CameraRig rig, ClusterRenderer clusterRenderer)
    {
        int totalNodeCount;
        if (rig.clusterType == CameraRig.ClusterType.Wall)
            totalNodeCount = rig.wallParams.cols * rig.wallParams.rows;
        else
            totalNodeCount = rig.caveParams.sides + (rig.caveParams.hasFloor ? 1 : 0) + (rig.caveParams.hasSky ? 1 : 0);

        for (int i = 0; i < totalNodeCount; ++i)
        {
            if (m_PreviewingIndex != -1 && m_PreviewingIndex != i)
                continue;

            float nearLeft = 0.0f;
            float nearRight = 0.0f;
            float nearBottom = 0.0f;
            float nearTop = 0.0f;

            // Get the nears
            rig.CalculateCameraProjectionFrustum (i, ref nearLeft, ref nearRight, ref nearBottom, ref nearTop);

            float ratio = rig.farClip / rig.nearClip;

            // Calculate the far
            float farLeft = nearLeft * ratio;
            float farRight = nearRight * ratio;
            float farBottom = nearBottom * ratio;
            float farTop = nearTop * ratio;

            // Points
            Vector3[] near = new Vector3[4];
            near[0] = new Vector3 (nearLeft, nearBottom, rig.nearClip);
            near[1] = new Vector3 (nearRight, nearBottom, rig.nearClip);
            near[2] = new Vector3 (nearRight, nearTop, rig.nearClip);
            near[3] = new Vector3 (nearLeft, nearTop, rig.nearClip);

            Vector3[] far = new Vector3[4];
            far[0] = new Vector3 (farLeft, farBottom, rig.farClip);
            far[1] = new Vector3 (farRight, farBottom, rig.farClip);
            far[2] = new Vector3 (farRight, farTop, rig.farClip);
            far[3] = new Vector3 (farLeft, farTop, rig.farClip);

            // Local to world transform (ignore scale of transform)
            Matrix4x4 localToWorld;
            if (rig.clusterType == CameraRig.ClusterType.Wall)
            {
                localToWorld = Matrix4x4.TRS(clusterRenderer.transform.position, clusterRenderer.transform.rotation, Vector3.one);
            }
            else
            {
                Quaternion q = clusterRenderer.transform.rotation * (m_PreviewingIndex == -1 ? Quaternion.Euler (rig.CalculateRotationForCaveNode (i)) : Quaternion.identity);
                localToWorld = Matrix4x4.TRS (clusterRenderer.transform.position, q, Vector3.one);
            }

            // transform point to world
            for (int p = 0; p < 4; ++p)
            {
                near[p] = localToWorld.MultiplyPoint (near[p]);
                far[p] = localToWorld.MultiplyPoint (far[p]);
            }

            // Draw the frustum gizmo
            for (int p = 0; p < 4; ++p)
            {
                Handles.DrawLine (near[p], near[(p + 1) % 4]);
                Handles.DrawLine (far[p], far[(p + 1) % 4]);
                Handles.DrawLine (near[p], far[p]);
            }

            // Label to show which index of node this screen belongs to
            Handles.Label(Vector3.Lerp(far[1], far[3], 0.9f), "" + i);

            // Button to activate preview
            Vector3 midPoint = Vector3.Lerp (far[0], far[2], 0.5f);
            float handleSize = HandleUtility.GetHandleSize(midPoint) * 0.1f;
            if (Handles.Button(midPoint, Quaternion.identity, handleSize, handleSize, Handles.DotCap))
            {
                if (m_PreviewingIndex == i)
                {
                    m_PreviewingIndex = -1;
                    ResetCamera ();
                }
                else
                {
                    m_PreviewingIndex = i;
                    rig.SetupCamera (Camera.main, i);
                }
            }
        }
    }