Beispiel #1
0
    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);
    }
Beispiel #2
0
 public void Vary()
 {
     m_variation.Vary();
 }