public void VaryModel(Mesh mesh, int numVertices, float[] baseVerts, VariationController objectVariations, List <VertexGroup> vertexGroups) { const int fpv = 10; const int normalOffset = 7; Vector3[] positions = new Vector3[numVertices]; Vector3[] normals = new Vector3[numVertices]; VariationMath.OffsetTransformVertsIntoArrays(Vector3.zero, Matrix4x4.identity, out positions, out normals, numVertices, fpv, 7, baseVerts); objectVariations.Vary(); for (int i = 0; i < vertexGroups.Count; ++i) { vertexGroups[i].Vary(); Matrix4x4 mtw = vertexGroups[i].CalcMTW(); Matrix4x4 inverseTranspose = mtw.transpose.inverse; Vector3 pivot = vertexGroups[i].GetPivot(); int indicesInVerteXGroup = vertexGroups[i].NumIndices(); for (int j = 0; j < indicesInVerteXGroup; ++j) { int vertIdx = vertexGroups[i].IndexAt(j); int posIdx = vertIdx * fpv; int normIdx = posIdx + normalOffset; positions[vertIdx] = mtw.MultiplyPoint3x4(new Vector3(baseVerts[posIdx + 0], baseVerts[posIdx + 1], baseVerts[posIdx + 2]) - pivot) + pivot; normals[vertIdx] = inverseTranspose.MultiplyVector(new Vector3(baseVerts[normIdx + 0], baseVerts[normIdx + 1], baseVerts[normIdx + 2])); } } SetMeshValues(mesh, positions, normals); }
public void Vary() { m_variation.Vary(); }