public RigidModel CreateRigidModel(bool drawable) { var model = new RigidModel(); var part = new RigidModelPart(); var dcs = new List <MeshDrawcall>(); var scale = Matrix4x4.CreateScale(Radius); if (drawable && SideMaterials.Length >= 6) { for (int i = 0; i < 6; i++) { int start, count; Vector3 pos; sphere.GetDrawParameters(faces[i], out start, out count, out pos); var dc = new MeshDrawcall(); dc.Buffer = sphere.VertexBuffer; dc.MaterialCrc = CrcTool.FLModelCrc(sideMaterialNames[i]); dc.BaseVertex = 0; dc.StartIndex = start; dc.PrimitiveCount = count; dc.HasScale = true; dc.Scale = scale; dcs.Add(dc); } if (SideMaterials.Length > 6) { var crc = CrcTool.FLModelCrc(sideMaterialNames[6]); for (int i = 0; i < 6; i++) { int start, count; Vector3 pos; sphere.GetDrawParameters(faces[i], out start, out count, out pos); var dc = new MeshDrawcall(); dc.Buffer = sphere.VertexBuffer; dc.MaterialCrc = crc; dc.BaseVertex = 0; dc.StartIndex = start; dc.PrimitiveCount = count; dc.HasScale = true; dc.Scale = scale; dcs.Add(dc); } } } var vmesh = new VisualMesh(); vmesh.Radius = Radius; vmesh.BoundingBox = BoundingBox.CreateFromSphere(new BoundingSphere(Vector3.Zero, Radius)); vmesh.Levels = new[] { dcs.ToArray() }; part.Hardpoints = new List <Hardpoint>(); part.Mesh = vmesh; model.Root = part; model.AllParts = new[] { part }; return(model); }
/// <summary> /// Read in the cell and initialize 3D/1D visualization/interaction infrastructure /// </summary> /// <returns> Unity Mesh visualization of the 3D geometry. </returns> /// <remarks> BuildVisualization is called by Simulation.cs, /// it is called after OnAwakePre and before OnAwakePost. /// If dryRun == true, Simulation will not call BuildVisualization. </remarks> protected override Mesh BuildVisualization() { if (!dryRun) { if (visualize1D) { Render1DCell(); } Update2DGrid(); VisualMesh = Grid2D.Mesh; VisualMesh.Rescale(transform, new Vector3(4, 4, 4)); VisualMesh.RecalculateNormals(); // Pass blownupMesh upwards to MeshSimulation ColliderMesh = VisualMesh; InitUI(); } return(VisualMesh); void Render1DCell() { Grid geom1D = Mapping.ModelGeometry; GameObject lines1D = gameObject.AddComponent <LinesRenderer> ().Draw(geom1D, color1D, lineWidth1D); } void InitUI() { GameObject gm = new GameObject(); gm.name = "LineGraphManager"; gm.transform.parent = transform; graphManager = gm.AddComponent <NDGraphManager>(); graphManager.sim = this; // Instantiate control panel prefab, announce active simulation to buttons controlPanel = Resources.Load("Prefabs/NeuronalDynamics/ControlPanel/NDControls") as GameObject; controlPanel = GameObject.Instantiate(controlPanel); NDSimulationController controller = controlPanel.GetComponent <NDSimulationController>(); if (controller == null) { Debug.LogWarning("No NDSimulationController found."); Destroy(controlPanel); return; } controller.sim = this; } }