예제 #1
0
 /// <summary>
 /// 初始化SofaMesh信息
 /// </summary>
 private void SofaMeshInfoInit()
 {
     for (int i = 0; i < SofaPhysicsAPI.GetMeshAmount(); i++)
     {
         SofaMeshInfo sofaMeshInfo = new SofaMeshInfo(i);
         sofaMeshInfoDic.Add(sofaMeshInfo.componentName, sofaMeshInfo);
     }
 }
예제 #2
0
    public void Update(SofaMeshInfo sofaMeshInfo)
    {
        if (componentName == sofaMeshInfo.componentName)
        {
            verticesPosition = new Vector3[sofaMeshInfo.verticesAmount];
            for (int i = 0; i < sofaMeshInfo.verticesAmount; i++)
            {
                verticesPosition[i].x = sofaMeshInfo.verticesPosition[i * 3 + 0];
                verticesPosition[i].y = sofaMeshInfo.verticesPosition[i * 3 + 1];
                verticesPosition[i].z = sofaMeshInfo.verticesPosition[i * 3 + 2];
            }
            if (sofaMeshInfo.triangleAmount != 0)
            {
                triangleTopology = new int[sofaMeshInfo.triangleAmount * 3];

                for (int i = 0; i < sofaMeshInfo.triangleAmount; i++)
                {
                    //1triangletopology = 3 vertices
                    //1triangletopology = 1 triangles
                    //由topology生成vertice!
                    triangleTopology[i * 3 + 0] = sofaMeshInfo.triangleTopology[i * 3 + 0];
                    triangleTopology[i * 3 + 1] = sofaMeshInfo.triangleTopology[i * 3 + 1];
                    triangleTopology[i * 3 + 2] = sofaMeshInfo.triangleTopology[i * 3 + 2];
                }
            }
            else
            {
                triangleTopology = new int[sofaMeshInfo.quadAmount * 6];
                for (int i = 0; i < sofaMeshInfo.quadAmount; i++)
                {
                    //1quadtopology = 6 vertices
                    //1quadtopology = 2 triangles
                    //由topology生成vertice!
                    triangleTopology[i * 6 + 0] = sofaMeshInfo.quadTopology[i * 4 + 0];
                    triangleTopology[i * 6 + 1] = sofaMeshInfo.quadTopology[i * 4 + 1];
                    triangleTopology[i * 6 + 2] = sofaMeshInfo.quadTopology[i * 4 + 2];
                    triangleTopology[i * 6 + 3] = sofaMeshInfo.quadTopology[i * 4 + 2];
                    triangleTopology[i * 6 + 4] = sofaMeshInfo.quadTopology[i * 4 + 3];
                    triangleTopology[i * 6 + 5] = sofaMeshInfo.quadTopology[i * 4 + 0];
                }
            }

            dynamicMesh.vertices  = verticesPosition;
            dynamicMesh.triangles = triangleTopology;
            dynamicMesh.RecalculateNormals();
            meshCollider.sharedMesh = dynamicMesh;

            meshRenderer.enabled = node.GetComponent <Sofa_OglModel>().isRenderingObject;
            meshCollider.enabled = node.GetComponent <Sofa_OglModel>().isCastingRay;
        }
        else
        {
            Debug.Log("Unity Mesh Info Update Failed : Soaf Mesh Info Name Not Match.");
        }
    }