예제 #1
0
    // Use this for initialization
    void Start()
    {
        if (!sceneMesh)
        {
            sceneMesh = GameObject.Find("SceneMesh");
        }

        if (!GameObject.Find("DrawMesh"))
        {
            drawMesh = new GameObject("DrawMesh");
        }
        else
        {
            drawMesh = GameObject.Find("DrawMesh");
        }


        // setting up mesh center
        GameObject obj = new GameObject("MeshCenter");

        meshCenter = obj.AddComponent <MeshCenter>();
        meshCenter.editingMeshes = new MeshFilter[50];
    }
예제 #2
0
    // Update is called once per frame
    void Update()
    {
        if (!meshCenter)
        {
            if (GameObject.Find("MeshCenter"))
            {
                meshCenter = GameObject.Find("MeshCenter").GetComponent <MeshCenter>();
            }
        }

        if (controller.GetPressDown(SteamVR_Controller.ButtonMask.Grip))
        {
            transform.parent.SendMessage("ToggleWireframe");
        }

        if (controller.GetPressDown(SteamVR_Controller.ButtonMask.Trigger))
        {
            foreach (MeshFilter editingMesh in meshCenter.editingMeshes)
            {
                if (editingMesh != null)
                {
                    nearest = meshCenter.editingMeshes[0];
                    for (int i = 0; i < editingMesh.mesh.vertexCount; i++)
                    {
                        float dist = (editingMesh.transform.TransformPoint(editingMesh.mesh.vertices[i]) - transform.position).magnitude;
                        if (dist < shortestDistinUpdate)
                        {
                            shortestDistinUpdate = dist;
                            nearest = editingMesh;
                            Debug.Log(nearest);
                        }
                    }
                }
            }
            shortestDistinUpdate = Mathf.Infinity;
        }



        foreach (MeshFilter editingMesh in meshCenter.editingMeshes)
        {
            if (editingMesh != null)
            {
                if (controller.GetPressDown(SteamVR_Controller.ButtonMask.Trigger))
                {
                    grab            = true;
                    lastPosition    = transform.position;
                    tempVertices    = nearest.mesh.vertices;
                    tempVertices2   = nearest.mesh.vertices;
                    selectionWeight = new float[tempVertices.Length];

                    for (int i = 0; i < tempVertices.Length; i++)
                    {
                        float dist = (nearest.transform.TransformPoint(tempVertices[i]) - transform.position).magnitude;
                        if (dist < brushSize)
                        {
                            Debug.Log(i);
                            // the selection function can be defined here
                            selectionWeight[i] = 1f;
                            selectionWeight[i] = Mathf.Clamp(((brushSize - dist) / brushSize) * 2, 0, 1);
                        }
                        else
                        {
                            selectionWeight[i] = 0;
                        }
                    }
                }


                if (controller.GetPressUp(SteamVR_Controller.ButtonMask.Trigger))
                {
                    grab = false;
                    if (editingMesh.GetComponent <MeshCollider>())
                    {
                        editingMesh.GetComponent <MeshCollider>().sharedMesh = editingMesh.mesh;
                    }
                }
                if (grab) // continue editing as long as grab is true
                {
                    for (int i = 0; i < tempVertices.Length; i++)
                    {
                        tempVertices2[i] = tempVertices[i] + editingMesh.transform.InverseTransformVector(transform.position - lastPosition) * selectionWeight[i];
                    }
                    nearest.mesh.vertices = tempVertices2;
                    nearest.mesh.RecalculateNormals();
                    nearest.mesh.RecalculateBounds();
                }
            }
        }
    }