Ejemplo n.º 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);
    }
Ejemplo n.º 2
0
    public override void OnInspectorGUI()
    {
        DrawDefaultInspector();
        EditorGUILayout.Space();

        if (GUILayout.Button("Random variation", GUILayout.Width(300), GUILayout.Height(50)))
        {
            VariationController variationController = target as VariationController;
            foreach (Variation x in variationController.variations)
            {
                x.GameObjectRoot.SetActive(false);
            }
            variationController.ChooseVariation().SetActive(true);
        }
        if (GUILayout.Button("Equalize odds", GUILayout.Width(300), GUILayout.Height(50)))
        {
            VariationController variationController = target as VariationController;
            Debug.Log(variationController.variations.Length);
            float odd = 1f / variationController.variations.Length;
            Debug.Log(odd.ToString());
            foreach (Variation x in variationController.variations)
            {
                x.Odds = odd;
            }
            variationController.ChooseVariation().SetActive(true);
        }
    }
Ejemplo n.º 3
0
    private static bool ReadVariationData(out VariationController variation, SetSRT callback)
    {
        float   valuesImportantInEditorButNotHere = 0;
        Vector3 ls = new Vector3(s_reader.ReadSingle(), s_reader.ReadSingle(), s_reader.ReadSingle());

        valuesImportantInEditorButNotHere = s_reader.ReadSingle();
        Vector3 lt = new Vector3(s_reader.ReadSingle(), s_reader.ReadSingle(), s_reader.ReadSingle());

        valuesImportantInEditorButNotHere = s_reader.ReadSingle();
        Vector3 lr = new Vector3(s_reader.ReadSingle(), s_reader.ReadSingle(), s_reader.ReadSingle());

        valuesImportantInEditorButNotHere = s_reader.ReadSingle();
        Vector3 hs = new Vector3(s_reader.ReadSingle(), s_reader.ReadSingle(), s_reader.ReadSingle());

        valuesImportantInEditorButNotHere = s_reader.ReadSingle();
        Vector3 ht = new Vector3(s_reader.ReadSingle(), s_reader.ReadSingle(), s_reader.ReadSingle());

        valuesImportantInEditorButNotHere = s_reader.ReadSingle();
        Vector3 hr = new Vector3(s_reader.ReadSingle(), s_reader.ReadSingle(), s_reader.ReadSingle());

        valuesImportantInEditorButNotHere = s_reader.ReadSingle();
        valuesImportantInEditorButNotHere = s_reader.ReadUInt32();
        valuesImportantInEditorButNotHere = s_reader.ReadUInt32();
        valuesImportantInEditorButNotHere = s_reader.ReadUInt32();
        VariationType vt = (VariationType)s_reader.ReadUInt32();

        valuesImportantInEditorButNotHere = s_reader.ReadUInt32();
        valuesImportantInEditorButNotHere = s_reader.ReadUInt32();

        lr *= Mathf.Rad2Deg;
        hr *= Mathf.Rad2Deg;

        variation = new VariationController(ls, lr, lt, hs, hr, ht, vt, callback);
        return(true);
    }
Ejemplo n.º 4
0
 private static bool ReadObjectLevelVariations(out VariationController objectVariations, SetSRT callback)
 {
     return(ReadVariationData(out objectVariations, callback));
 }
Ejemplo n.º 5
0
    private static bool ReadMeshInfo(SetSRT objectVariationCallback, out float[] outVerts, out int floatsPerVertex, out List <VertexGroup> vertexGroups, out VariationController objectVariations)
    {
        outVerts         = null;
        floatsPerVertex  = 0;
        vertexGroups     = null;
        objectVariations = null;

        int  numVerts  = 0;
        uint numGroups = 0;

        if (!ReadMeshHeader(out numVerts, out floatsPerVertex))
        {
            Debug.Log("ERROR: Failed to ReadMeshInfo! Failed to ReadMeshHeader!\n"); return(false);
        }
        if (!ReadMeshVerts(out outVerts, numVerts * floatsPerVertex))
        {
            Debug.Log("ERROR: Failed to ReadMeshInfo! Failed to ReadMeshVerts!\n"); ClearVertexData(out outVerts); return(false);
        }
        if (!ReadObjectLevelVariations(out objectVariations, objectVariationCallback))
        {
            Debug.Log("ERROR: Failed to ReadMeshInfo! Failed to ReadObjectLevelVariations!\n"); ClearVertexData(out outVerts); return(false);
        }
        if (!ReadVertexGroupHeader(out numGroups))
        {
            Debug.Log("ERROR: Failed to ReadMeshInfo! Failed to ReadVertexGroupHeader!\n"); ClearVertexData(out outVerts); return(false);
        }
        if (!ReadVertexGroupData(out vertexGroups, numGroups))
        {
            Debug.Log("ERROR: Failed to ReadMeshInfo! Failed to ReadVertexGroupData!\n"); ClearVertexData(out outVerts); ClearVertexGroups(vertexGroups); return(false);
        }
        return(true);
    }
Ejemplo n.º 6
0
    public static bool LoadBaseMesh(string resourceName, SetSRT objectVariationCallback, out float[] verts, out int floatsPerVertex, out List <VertexGroup> vertexGroups, out VariationController objectVariations)
    {
        verts            = null;
        floatsPerVertex  = 0;
        vertexGroups     = null;
        objectVariations = null;

        if (!OpenInputFile(resourceName))
        {
            Debug.Log("ERROR: Failed to ReadMeshFromFile! Could not open resource file [" + resourceName + "]!");
            return(false);
        }

        if (!CheckFormatData())
        {
            Debug.Log("ERROR: Failed to ReadMeshFromFile! Failed to CheckFormatData! Ensure that file is of the correct format!\n");
            CloseInputFile();
            return(false);
        }

        if (!CheckVersionData())
        {
            Debug.Log("ERROR: Failed to ReadMeshFromFile! Failed to CheckVersionData! You are probably trying to load a file made using an older version of the CustomIO Exporter!\n");
            CloseInputFile();
            return(false);
        }

        if (!ReadMeshInfo(objectVariationCallback, out verts, out floatsPerVertex, out vertexGroups, out objectVariations))
        {
            Debug.Log("ERROR: Failed to ReadMeshFromFile! Failed to ReadMeshInfo!\n");
            CloseInputFile();
            return(false);
        }

        if (!CloseInputFile())
        {
            Debug.Log("ERROR: Failed to CloseInputFile! Continuing Execution!\n");
        }

        return(true);
    }
Ejemplo n.º 7
0
 public void SetVariation(VariationController variation)
 {
     m_variation = variation;
 }