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); } }
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); } }
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(); } } }