void Update() { if (!enabled) { return; } curMousePosition = new Vector3(Input.mousePosition.x, screen.y - Input.mousePosition.y, 0f); bool mouseOnLeftSide = Input.mousePosition.x < screen.x / 2; if ((mouseOnLeftSide && !isLeftEye) || (!mouseOnLeftSide && isLeftEye)) { closestVertex = -1; return; } Cursor.visible = !(new Rect(0f, 0f, screen.x, screen.y).Contains(Input.mousePosition)); if (!Application.isEditor) { return; } if (closestVertex != -1 && Input.GetMouseButton(0) || Input.GetMouseButtonDown(1)) { //Move a control point if it already exists for (int i = 0; i < vertexIndices.Count; i++) { if (closestVertex == vertexIndices[i]) { Ray cameraRay = mainCamera.ScreenPointToRay(curMousePosition); if (!Input.GetMouseButtonDown(1)) { Vector3 start = filter.transform.InverseTransformPoint(cameraRay.origin); controlPoints[i] = new Vector3(start.x, start.y, 0f); calibrationMesh.updateMeshDeformation(ref filter, controlPoints.ToArray(), true, 1.5f, 10); } else { vertexIndices.RemoveAt(i); controlPoints.RemoveAt(i); InitializeMeshDeformations(); } return; } } //If control point doesn't already exist, create a new one if (!Input.GetMouseButtonDown(1)) { vertexIndices.Add(closestVertex); controlPoints.Add(calibrationMesh.distortedMeshVertices[closestVertex]); InitializeMeshDeformations(); } } else if (Input.mousePosition != lastMousePosition) { //Find closest vertex to mouse position closestVertex = findClosestVertexToMouse(calibrationMesh, mainCamera); } lastMousePosition = Input.mousePosition; }
public void InitializeMeshDeformations() { if (!enabled) { return; } calibrationMesh = new MeshDeformer(filter, vertexIndices.ToArray()); calibrationMesh.updateMeshDeformation(ref filter, controlPoints.ToArray(), true, 2f, 50); }