Exemplo n.º 1
0
 void Awake()
 {
     // box = this.GetComponent<Transform>();
     cube = new HyperCubeMesh(center);
     #region Faces
     faces = new int[] { 4, 0, 8, 12,
                         6, 2, 10, 14,
                         5, 1, 9, 13,
                         7, 3, 11, 15,
                         2, 0, 8, 10,
                         6, 4, 12, 14,
                         3, 1, 9, 11,
                         7, 5, 13, 15,
                         2, 0, 4, 6,
                         10, 8, 12, 14,
                         3, 1, 5, 7,
                         11, 9, 13, 15,
                         1, 0, 8, 9,
                         5, 4, 12, 13,
                         3, 2, 10, 11,
                         7, 6, 14, 15,
                         1, 0, 4, 5,
                         9, 8, 12, 13,
                         3, 2, 6, 7,
                         11, 10, 14, 15,
                         1, 0, 2, 3,
                         9, 8, 10, 11,
                         5, 4, 6, 7,
                         13, 12, 14, 15 };
     vertices = new Vector3[16];
     for (int i = 0; i < 16; i++)
     {
         vertices[i] = cube.get3dver(i);
     }
     Mesh tmp = new Mesh();
     updatevertices(tmp);
     #endregion
     mesh = new Mesh();
     for (int i = 0; i < 16; i++)
     {
         vertices[i] = cube.get3dver(i);
     }
     mesh.vertices = vertices;
     mesh.SetIndices(faces, MeshTopology.Quads, 0);
     mesh.RecalculateBounds();
     mesh.Optimize();
     mesh.SetTriangles(mesh.GetTriangles(0), 0);
     GetComponent <MeshFilter>().mesh         = mesh;
     GetComponent <MeshCollider>().sharedMesh = mesh;
     A_ = new Vector3();
     B_ = new Vector3();
     isTriggerPressed = false;
     A        = new Vector4();
     B        = new Vector4();
     radius   = 1.0f;
     children = new GameObject[8];
 }
Exemplo n.º 2
0
        // Update is called once per frame
        void Update()
        {
            for (int i = 0; i < 8; i++)
            {
                vertices[i] = hypermesh.get3dver(hyperface[i + faceindex * 8]);
            }

            if (isTriggerPressed)
            {
                Vector3 relapos = new Vector3();
                relapos = (_B - box.position) * 8f / 3f;
                float r = (float)Math.Sqrt(relapos.x * relapos.x + relapos.y * relapos.y + relapos.z * relapos.z);
                if (r < radius)
                {
                    B = new Vector4(relapos.x, relapos.y, relapos.z, (float)Math.Sqrt(radius * radius - relapos.x * relapos.x - relapos.y * relapos.y - relapos.z * relapos.z));
                }
                else
                {
                    //float length = relapos.magnitude;
                    Vector3 Q = (radius / r) * relapos;
                    relapos = Q + box.position;
                    B       = new Vector4(Q.x, Q.y, Q.z, 0f);
                }
                UpdateRotation(hypermesh);
                A = B;
            }
            mesh.vertices = vertices;
            mesh.SetIndices(faces, MeshTopology.Quads, 0);
            mesh.RecalculateBounds();
            mesh.Optimize();
        }
Exemplo n.º 3
0
 void updatevertices(Mesh mesh)
 {
     for (int i = 0; i < 16; i++)
     {
         vertices[i] = cube.get3dver(i);
     }
     mesh.vertices = vertices;
     mesh.SetIndices(faces, MeshTopology.Quads, 0);
     mesh.RecalculateBounds();
     mesh.Optimize();
     mesh.SetTriangles(mesh.GetTriangles(0), 0);
     GetComponent <MeshCollider>().sharedMesh = null;
     GetComponent <MeshCollider>().sharedMesh = mesh;
 }
Exemplo n.º 4
0
 public void Renew()
 {
     hypermesh = new HyperCubeMesh(center);
     vertices  = new Vector3[8];
     for (int i = 0; i < 8; i++)
     {
         vertices[i] = hypermesh.get3dver(hyperface[i + faceindex * 8]);
     }
     mesh.vertices = vertices;
     mesh.SetIndices(faces, MeshTopology.Quads, 0);
     mesh.RecalculateBounds();
     mesh.Optimize();
     UpdateRotation(hypermesh);
 }
Exemplo n.º 5
0
        // Use this for initialization

        void Awake()
        {
            faceindex        = 0;
            _A               = new Vector3();
            _B               = new Vector3();
            isTriggerPressed = false;
            A         = new Vector4();
            B         = new Vector4();
            center    = new Vector4();
            radius    = 1.0f;           //Setup the radius of the sphere collider
            hypermesh = new HyperCubeMesh(center);
            vertices  = new Vector3[8];
            hyperface = new int[] { 1, 3, 5, 7, 9, 11, 13, 15,
                                    0, 2, 4, 6, 8, 10, 12, 14,
                                    2, 3, 6, 7, 10, 11, 14, 15,
                                    0, 1, 4, 5, 8, 9, 12, 13,
                                    4, 5, 6, 7, 12, 13, 14, 15,
                                    0, 1, 2, 3, 8, 9, 10, 11,
                                    8, 9, 10, 11, 12, 13, 14, 15,
                                    0, 1, 2, 3, 4, 5, 6, 7 };
            for (int i = 0; i < 8; i++)
            {
                vertices[i] = hypermesh.get3dver(hyperface[i + faceindex * 8]);
            }

            mesh  = new Mesh();
            faces = new int[24] {
                2, 0, 4, 6,
                3, 1, 5, 7,
                1, 0, 4, 5,
                3, 2, 6, 7,
                1, 0, 2, 3,
                5, 4, 6, 7
            };
            mesh.vertices = vertices;
            mesh.SetIndices(faces, MeshTopology.Quads, 0);
            mesh.RecalculateBounds();
            mesh.Optimize();
            GetComponent <MeshFilter>().mesh = mesh;
        }