/// <summary> /// 初始化SofaMesh信息 /// </summary> private void SofaMeshInfoInit() { for (int i = 0; i < SofaPhysicsAPI.GetMeshAmount(); i++) { SofaMeshInfo sofaMeshInfo = new SofaMeshInfo(i); sofaMeshInfoDic.Add(sofaMeshInfo.componentName, sofaMeshInfo); } }
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."); } }