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 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); } }
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); }
private static bool ReadObjectLevelVariations(out VariationController objectVariations, SetSRT callback) { return(ReadVariationData(out objectVariations, callback)); }
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); }
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); }
public void SetVariation(VariationController variation) { m_variation = variation; }