public void BuildTetra()
    {
        tetrahedrons = _manager.GetTetrahedron();
        vertices     = _manager.GetMesh().Vertices;

        print("BuildTetraBuildTetraBuildTetraBuildTetra" + tetrahedrons.Count);

        foreach (var tetra in tetrahedrons)
        {
            Vector3 v0 = (Vector3)vertices[tetra.Vertex0].Position;
            Vector3 v1 = (Vector3)vertices[tetra.Vertex1].Position;
            Vector3 v2 = (Vector3)vertices[tetra.Vertex2].Position;
            Vector3 v3 = (Vector3)vertices[tetra.Vertex3].Position;

            v0 = transform.TransformPoint(v0);
            v1 = transform.TransformPoint(v1);
            v2 = transform.TransformPoint(v2);
            v3 = transform.TransformPoint(v3);

            CreateMesh(v0, v1, v2, v3);
        }
    }
示例#2
0
    public void ChaseMovement()
    {
        foreach (var tetra in _manager.GetTetrahedron())
        {
            Vector3 origin = (Vector3)_manager.GetMesh().Vertices[tetra.Vertex0].Position;

            _distance = _MoveDistance.magnitude * 0.1f;

            //next
            _manager.GetMesh().Vertices[tetra.Vertex1].Position =
                (_manager.GetMesh().Vertices[tetra.Vertex0].Position - _manager.GetMesh().Vertices[tetra.Vertex1].Position) * _distance +
                _manager.GetMesh().Vertices[tetra.Vertex1].Position;

            _manager.GetMesh().Vertices[tetra.Vertex2].Position =
                (_manager.GetMesh().Vertices[tetra.Vertex0].Position - _manager.GetMesh().Vertices[tetra.Vertex2].Position) * _distance +
                _manager.GetMesh().Vertices[tetra.Vertex2].Position;

            _manager.GetMesh().Vertices[tetra.Vertex3].Position =
                (_manager.GetMesh().Vertices[tetra.Vertex0].Position - _manager.GetMesh().Vertices[tetra.Vertex3].Position) * _distance +
                _manager.GetMesh().Vertices[tetra.Vertex3].Position;
        }
    }
示例#3
0
    public void BuildTensegrity()
    {
        if (structures == null)
        {
            structures = new List <TetrahedronType> ();
        }

        var tetrahedrons = _manager.GetTetrahedron();
        var verts        = _manager.GetMesh().Vertices;

        if (tetrahedrons.Count == structures.Count)
        {
            return;
        }

        int startfrom = structures.Count;

        var tetra = tetrahedrons [startfrom];

        var p0 = (Vector3)verts [tetra.Vertex0].Position;
        var p1 = (Vector3)verts [tetra.Vertex1].Position;
        var p2 = (Vector3)verts [tetra.Vertex2].Position;
        var p3 = (Vector3)verts [tetra.Vertex3].Position;

        p0 = transform.TransformPoint(p0);
        p1 = transform.TransformPoint(p1);
        p2 = transform.TransformPoint(p2);
        p3 = transform.TransformPoint(p3);


        var cen       = (p0 + p1 + p2 + p3) / 4f;
        var tetratype = Instantiate(_type, transform);

        tetratype.transform.position = cen;

        p0 = tetratype.transform.InverseTransformPoint(p0);
        p1 = tetratype.transform.InverseTransformPoint(p1);
        p2 = tetratype.transform.InverseTransformPoint(p2);
        p3 = tetratype.transform.InverseTransformPoint(p3);


        tetratype.SetupTetraPoints(new Vector3[] { p0, p1, p2, p3 });
        tetratype.SetupStructure();
        structures.Add(tetratype);
        tetratype.name = "tetra_" + startfrom;
    }
    public void GetInstantPoint()
    {
        var tetrahedrons = _growthManager.GetTetrahedron();
        var verts        = _growthManager.GetMesh().Vertices;

        foreach (var tetra in tetrahedrons)
        {
            var p0 = (Vector3)verts[tetra.Vertex0].Position;
            var p1 = (Vector3)verts[tetra.Vertex1].Position;
            var p2 = (Vector3)verts[tetra.Vertex2].Position;
            var p3 = (Vector3)verts[tetra.Vertex3].Position;
            allPoint.Add(p0);
            allPoint.Add(p1);
            allPoint.Add(p2);
            allPoint.Add(p3);
        }
    }
    public void GrowTensegrityWithTwoType()
    {
        if (structuresA == null)
        {
            structuresA = new List <TetrahedronTypeA>();
        }
        if (structuresB == null)
        {
            structuresB = new List <TetrahedronTypeB>();
        }


        var tetrahedrons = _manager.GetTetrahedron();
        var verts        = _manager.GetMesh().Vertices;


        if (tetrahedrons.Count == structuresA.Count + structuresB.Count)
        {
            return;
        }

        int index = 0;

        for (int i = 0; i < tetrahedrons.Count; i++)
        {
            var tetra = tetrahedrons[i];

            if (i % 2 == 0)
            {
                var tetratype = BuildTensegrityTypeA(tetra, verts);
                tetratype.name = "tetra_A_" + i;
                structuresA.Add(tetratype);
            }
            else
            {
                var tetratype = BuildTensegrityTypeB(tetra, verts);
                structuresB.Add(tetratype);
                tetratype.name = "tetra_B_" + i;
            }

            index++;
        }
    }