Ejemplo n.º 1
0
            internal void PreProcessRaycastSource(Transform rayOrigin)
            {
                var camera         = CameraUtils.GetMainCamera();
                var cameraPosition = camera.transform.position;
                var matrix         = camera.worldToCameraMatrix;

                if (!m_StandardManipulator)
                {
                    m_StandardManipulator = evr.GetComponentInChildren <StandardManipulator>();
                    if (m_StandardManipulator)
                    {
                        ConnectInterface(m_StandardManipulator);
                    }
                }

                if (m_StandardManipulator)
                {
                    m_StandardManipulator.AdjustScale(cameraPosition, matrix);
                }

                if (!m_ScaleManipulator)
                {
                    m_ScaleManipulator = evr.GetComponentInChildren <ScaleManipulator>();
                }

                if (m_ScaleManipulator)
                {
                    m_ScaleManipulator.AdjustScale(cameraPosition, matrix);
                }
            }
Ejemplo n.º 2
0
        void PreProcessRaycastSource(Transform rayOrigin)
        {
            var camera         = U.Camera.GetMainCamera();
            var cameraPosition = camera.transform.position;
            var matrix         = camera.worldToCameraMatrix;

#if ENABLE_MINIWORLD_RAY_SELECTION
            MiniWorldRay ray;
            if (m_MiniWorldRays.TryGetValue(rayOrigin, out ray))
            {
                matrix = ray.miniWorld.getWorldToCameraMatrix(camera);
            }
#endif

            if (!m_StandardManipulator)
            {
                m_StandardManipulator = GetComponentInChildren <StandardManipulator>();
            }

            if (m_StandardManipulator)
            {
                m_StandardManipulator.AdjustScale(cameraPosition, matrix);
            }

            if (!m_ScaleManipulator)
            {
                m_ScaleManipulator = GetComponentInChildren <ScaleManipulator>();
            }

            if (m_ScaleManipulator)
            {
                m_ScaleManipulator.AdjustScale(cameraPosition, matrix);
            }
        }
Ejemplo n.º 3
0
            internal void PreProcessRaycastSource(Transform rayOrigin)
            {
                var camera         = CameraUtils.GetMainCamera();
                var cameraPosition = camera.transform.position;
                var matrix         = camera.worldToCameraMatrix;

                // Include inactive children to avoid constantly polling for manipulators until first selection is made
                if (!m_StandardManipulator)
                {
                    m_StandardManipulator = evr.GetComponentInChildren <StandardManipulator>(true);
                    if (m_StandardManipulator)
                    {
                        ConnectInterface(m_StandardManipulator);
                    }
                }

                if (m_StandardManipulator)
                {
                    m_StandardManipulator.AdjustScale(cameraPosition, matrix);
                }

                if (!m_ScaleManipulator)
                {
                    m_ScaleManipulator = evr.GetComponentInChildren <ScaleManipulator>(true);
                }

                if (m_ScaleManipulator)
                {
                    m_ScaleManipulator.AdjustScale(cameraPosition, matrix);
                }
            }
    // Update is called once per frame
    void Update()
    {
        ShowDensity();
        ShowUpdateFrequency();
        ShowPointSize();

        frame++;
        var pos = FirstPersonCamera.transform.position;
        var rot = FirstPersonCamera.transform.rotation;

        if (Screen.currentResolution.width > Screen.currentResolution.height)// If rotate the device, set the position of UI text again
        {
            numText.transform.position = new Vector3(220, Screen.currentResolution.height - 35, 0);
        }
        deltaTime += (Time.unscaledDeltaTime - deltaTime) * 0.1f;

        if (IsPut == true && frame % UpdateFrequency == 0) // Update the current point cloud
        {
            frame = 0;
            mesh  = UpdateMesh(mesh);
            // Update the mesh
            pointObj.GetComponent <MeshFilter>().mesh = mesh;

            // Update the shaders
            Material mat = new Material(Shader.Find("Custom/PointCloud"));
            mat.SetFloat("_ScreenHeight", Screen.height);
            mat.SetFloat("_tanFOV", Mathf.Tan(0.5f * FirstPersonCamera.fieldOfView * Mathf.Deg2Rad));
            mat.SetFloat("_n", FirstPersonCamera.nearClipPlane);
            mat.SetFloat("_r", r);
            mat.SetFloat("_times", Times);

            pointObj.GetComponent <MeshRenderer>().material = mat;
        }
        else if (IsPut == false)
        {
            float fps = 1.0f / deltaTime;
            numText.text = "Number of points:" + "\n" + "0" + "\n" + "Frame rate:" + "\n" + fps.ToString("0");
        }

        Touch touch;

        if (Input.touchCount < 1 || (touch = Input.GetTouch(0)).phase != TouchPhase.Began)
        {
            return;
        }

        TrackableHit      hit;
        TrackableHitFlags raycastFilter = TrackableHitFlags.PlaneWithinPolygon;

        //if (Frame.Raycast(touch.position.x, touch.position.y, raycastFilter, out hit))
        if (Frame.Raycast(touch.position.x, touch.position.y, raycastFilter, out hit) && IsTouchEnabled)
        {
            if ((hit.Trackable is DetectedPlane) && Vector3.Dot(FirstPersonCamera.transform.position - hit.Pose.position, hit.Pose.rotation * Vector3.up) < 0)
            {
                Debug.Log("Ray hits the back of the detected plane!");
            }
            else
            {
                IsPut = true;

                pointObj = new GameObject();
                pointObj.AddComponent <MeshFilter>();
                pointObj.AddComponent <MeshRenderer>();

                pointObj.GetComponent <MeshFilter>().mesh = mesh;
                Material mat = new Material(Shader.Find("Custom/PointCloud"));
                mat.SetFloat("_ScreenHeight", Screen.height);
                mat.SetFloat("_tanFOV", Mathf.Tan(0.5f * FirstPersonCamera.fieldOfView * Mathf.Deg2Rad));
                mat.SetFloat("_n", FirstPersonCamera.nearClipPlane);
                mat.SetFloat("_r", r);
                mat.SetFloat("_times", Times);
                pointObj.GetComponent <MeshRenderer>().material = mat;

                pointObj.transform.position = hit.Pose.position;
                pointObj.transform.rotation = hit.Pose.rotation;
                Position = hit.Pose.position;

                // Add ARCore's object manipulator (enables scaling, rotation, translation)
                var manipulator = Instantiate(ManipulatorPrefab, hit.Pose.position, hit.Pose.rotation);
                scaler = manipulator.GetComponent <ScaleManipulator>();

                //scaler = manipulator.GetComponent<ScaleManipulator>();
                pointObj.transform.parent = manipulator.transform;

                var anchor = hit.Trackable.CreateAnchor(hit.Pose);
                manipulator.transform.parent = anchor.transform;
                manipulator.GetComponent <Manipulator>().Select();
            }
        }
    }