Esempio n. 1
0
        /// <summary>
        /// Moves a vertex by index in a direction (-1, +1 or 0) by a factor delta.
        /// A direction can be Vector2(-1,0); move the display in a negative X direction.
        /// The factor delta sets the "speed/distance" of the movement.
        /// </summary>
        /// <param name="direction">the direction to move in</param>
        /// <param name="delta">movement factor</param>
        /// <param name="selectedIndex">the display to move vertex on</param>
        /// <param name="vertexIndex">the vertex to move</param>
        private void LocalShift(Vector2 direction, float delta, int selectedIndex, int vertexIndex)
        {
            PhysicalDisplayCalibration lastCalibration = allOptions[lastSelectedIndex].calibration;

            lastCalibration.HideVisualMarker();
            PhysicalDisplayCalibration calibration = allOptions[selectedIndex].calibration;

            calibration.SetVisualMarkerVertextPoint(vertexIndex);

            Debug.Log("RealtimeCalibration: LocalShift called " + delta + ", " + selectedIndex + ", " + vertexIndex);

            MeshFilter lastWarpedFilter = null;

            foreach (Dewarp dewarp in calibration.GetDisplayWarpsValues())
            {
                MeshFilter meshFilter = dewarp.GetDewarpMeshFilter();
                lastWarpedFilter = meshFilter;
                Vector3[] verts = meshFilter.sharedMesh.vertices;
                // verts[vertexIndex] = new Vector3(verts[vertexIndex].x + direction.x * delta, verts[vertexIndex].y + direction.y * delta, verts[vertexIndex].z);

                Dictionary <int, float> vertsToShift = this.getIndexesSurrounding(dewarp.xSize, vertexIndex);
                foreach (var ind in vertsToShift)
                {
                    verts[ind.Key] = new Vector3(verts[ind.Key].x + (direction.x * delta * ind.Value), verts[ind.Key].y + (direction.y * delta * ind.Value), verts[ind.Key].z);
                }

                meshFilter.sharedMesh.vertices = verts;
                meshFilter.sharedMesh.UploadMeshData(false);
                meshFilter.mesh.RecalculateBounds();
                meshFilter.mesh.RecalculateTangents();
            }

            calibration.UpdateMeshPositions(lastWarpedFilter?.sharedMesh.vertices);
        }
Esempio n. 2
0
        /// <summary>
        /// Assign all point positions based on positions of the four corner points;
        /// positions are linearly interpolated
        /// </summary>
        public void LocalInterpolateFromCorners(int selectedIndex)
        {
            PhysicalDisplayCalibration lastCalibration = allOptions[lastSelectedIndex].calibration;

            lastCalibration.HideVisualMarker();
            PhysicalDisplayCalibration calibration = allOptions[selectedIndex].calibration;

            calibration.SetVisualMarkerVertextPoint(vertexIndex);

            Debug.Log("RealtimeCalibration: InterpolateFromCorners called, selectedIndex " + selectedIndex);

            MeshFilter lastWarpedFilter = null;

            foreach (Dewarp dewarp in calibration.GetDisplayWarpsValues())
            {
                MeshFilter meshFilter = dewarp.GetDewarpMeshFilter();
                lastWarpedFilter = meshFilter;
                Vector3[] verts = meshFilter.sharedMesh.vertices;
                // verts[vertexIndex] = new Vector3(verts[vertexIndex].x + direction.x * delta, verts[vertexIndex].y + direction.y * delta, verts[vertexIndex].z);

                Vector3 corner_0 = verts[0];
                Vector3 corner_1 = verts[7];
                Vector3 corner_2 = verts[63];
                Vector3 corner_3 = verts[56];
                for (int x = 0; x < 8; x++)
                {
                    float   xfac   = x / 7.0f;
                    Vector3 xmix_0 = corner_0 * (1.0f - xfac) + corner_1 * xfac;
                    Vector3 xmix_1 = corner_3 * (1.0f - xfac) + corner_2 * xfac;
                    for (int y = 0; y < 8; y++)
                    {
                        float yfac = y / 7.0f;
                        verts[y * 8 + x] = xmix_0 * (1.0f - yfac) + xmix_1 * yfac;
                    }
                }

                meshFilter.sharedMesh.vertices = verts;
                meshFilter.sharedMesh.UploadMeshData(false);
                meshFilter.mesh.RecalculateBounds();
                meshFilter.mesh.RecalculateTangents();
            }

            calibration.UpdateMeshPositions(lastWarpedFilter?.sharedMesh.vertices);
        }