コード例 #1
0
    private void DrawHermitePrediction()
    {
        Gizmos.color = Color.cyan;

        Gizmos.DrawRay(_oldState.Position, _oldState.Velocity);
        Gizmos.DrawRay(_newState.Position, _newState.Velocity);

        Gizmos.color = Color.blue;

        int res = 32;

        Vector3[] points = new Vector3[res];

        for (int i = 0; i < res; i++)
        {
            float   t  = Mathf.Lerp(_predictStart, _predictEnd, i / (float)res);
            Vector3 p0 = _oldState.Position;
            Vector3 p1 = _oldState.Position + _oldState.Velocity;
            Vector3 p2 = _newState.Position + _newState.Velocity * t + 0.5f * _newState.Acceleration * (t * t);
            Vector3 p3 = p2 - _newState.Velocity + _newState.Acceleration * t;

            points[i] = SplineUtil.Hermite(p0, p1, p2, p3, 1.0f);
        }

        for (int i = 0; i < points.Length - 1; i++)
        {
            Gizmos.DrawLine(points[i], points[i + 1]);
        }
    }
コード例 #2
0
    private void DrawHermite()
    {
        Gizmos.color = Color.cyan;

        Gizmos.DrawRay(_oldState.Position, _oldState.Velocity);
        Gizmos.DrawRay(_newState.Position, _newState.Velocity);

        Vector3 p0 = _oldState.Position;
        Vector3 p1 = _oldState.Position + _oldState.Velocity;
        Vector3 p2 = _newState.Position + _newState.Velocity * _predictEnd + 0.5f * _newState.Acceleration * (_predictEnd * _predictEnd);
        Vector3 p3 = p2 - _newState.Velocity + _newState.Acceleration * _predictEnd;

        Gizmos.color = Color.blue;

        int res = 16;

        for (int i = 0; i < res; i++)
        {
            float   tA     = i / (float)(res - 1);
            float   tB     = i / (float)(res);
            Vector3 pointA = SplineUtil.Hermite(p0, p1, p2, p3, tA);
            Vector3 pointB = SplineUtil.Hermite(p0, p1, p2, p3, tB);
            Gizmos.DrawLine(pointA, pointB);
        }
    }
コード例 #3
0
ファイル: SmoothBrush.cs プロジェクト: emanmomot/Painting
 private void RecomputeSlopes()
 {
     if (cps.Count == 3)
     {
         for (int i = 1; i < cps.Count; i++)
         {
             ms[i] = (SplineUtil.finiteDiffSlope2D(i, cps));
         }
     }
     else
     {
         for (int i = 0; i < cps.Count; i++)
         {
             ms[i] = (SplineUtil.finiteDiffSlope2D(i, cps));
         }
     }
 }
コード例 #4
0
ファイル: SmoothBrush.cs プロジェクト: emanmomot/Painting
    public SmoothBrush(Vector2 start, float size, float step, PaintableObject obj)
    {
        cps   = new List <Vector2> ();
        ms    = new List <Vector2> ();
        sizes = new List <float> ();

        dots = new List <Transform> ();

        this.stepSize = step;
        this.obj      = obj;

        cps.Add(start);
        // dummy cp
        cps.Add(start + new Vector2(.001f, 0));
        ms.Add(SplineUtil.finiteDiffSlope2D(0, cps));
        ms.Add(SplineUtil.finiteDiffSlope2D(1, cps));
        sizes.Add(size);
        sizes.Add(size);
    }
コード例 #5
0
        private void testNus2()
        {
            CadFigureNurbsSurface nfig = (CadFigureNurbsSurface)Controller.DB.NewFigure(CadFigure.Types.NURBS_SURFACE);

            int ucnt = 4;
            int vcnt = 4;

            VertexList vl = SplineUtil.CreateBoxControlPoints(
                ucnt, vcnt, Vector3d.UnitX * 20.0, Vector3d.UnitZ * 20.0, Vector3d.UnitY * -20.0);

            nfig.Setup(2, ucnt * 2, vcnt, vl, null, 16, 16, false, false, true, true);

            Controller.CurrentLayer.AddFigure(nfig);

            RunOnMainThread(() =>
            {
                Controller.UpdateObjectTree(true);
            });
        }
コード例 #6
0
    public List <Vector3> GetPath(PathNeuronNode start)
    {
        List <Vector3> path = new List <Vector3>();

        path.Add(node1.transform.position);
        foreach (PathTendrilNode node in tendril.pathTendrilNodes)
        {
            path.Add(node.transform.position);
        }
        path.Add(node2.transform.position);

        if (node1 != start)
        {
            path.Reverse();
        }

        path = SplineUtil.GenerateSpline(path, 5);

        // add endpoint
        path.Add((start == node1 ? node2: node1).transform.position);

        return(path);
    }
コード例 #7
0
ファイル: SmoothBrush.cs プロジェクト: emanmomot/Painting
    public void UpdateStroke()
    {
        // draw the finalized dots to the texture
        if (cps.Count > 3)
        {
            for (int i = numFinalDots; i < dots.Count; i++)
            {
                FreeDot(dots [i].gameObject);
            }
            TexturePainter.singleton.RenderCanvas(obj, false);
            TexturePainter.singleton.SaveTexture(obj);

            cps.RemoveAt(0);
            ms.RemoveAt(0);
            sizes.RemoveAt(0);

            dots.Clear();
        }
        else
        {
            for (int i = 0; i < dots.Count; i++)
            {
                FreeDot(dots [i].gameObject);
            }
            dots.Clear();
        }

        RecomputeSlopes();

        for (int i = 0; i < cps.Count - 1; i++)
        {
            Vector2 cp0 = cps [i];
            Vector2 cp1 = cps [i + 1];
            Vector2 m0  = ms [i];
            Vector2 m1  = ms [i + 1];

            Vector2 d = cp1 - cp0;
            Vector2 p = cp0;

            float s0 = sizes [i];
            float s1 = sizes [i + 1];

            float ss = stepSize * Mathf.Min(s0, s1);

            float texScaleMult = 1F / Mathf.Min(obj.texScale.x, obj.texScale.y);

            int numSteps = Mathf.FloorToInt(texScaleMult * d.magnitude / ss);
            d = ss * d.normalized / texScaleMult;

            float t  = 0;
            float dt = 1.0f / numSteps;

            if (i == 0)
            {
                numFinalDots = numSteps;
            }

            // first add dot at cp0
            dots.Add(TexturePainter.singleton.MakeDot(obj, cp0, s0).transform);

            // start at 1 bc we already did cp0
            for (int j = 1; j < numSteps; j++)
            {
                p += d;
                t += dt;

                Vector2    pos    = SplineUtil.evalSpline2D(p, cp0, cp1, m0, m1);
                float      size   = SplineUtil.lerp1D(t, s0, s1);
                GameObject newDot = TexturePainter.singleton.MakeDot(obj, pos, size);
                dots.Add(newDot.transform);
            }
        }
    }
コード例 #8
0
ファイル: SmoothBrush.cs プロジェクト: emanmomot/Painting
 public void AddCP(Vector2 p, float size)
 {
     cps.Add(p);
     ms.Add(SplineUtil.finiteDiffSlope2D(cps.Count - 1, cps));
     sizes.Add(size);
 }