コード例 #1
0
        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);
        }
コード例 #2
0
ファイル: NDSimulation.cs プロジェクト: c2m2/NeuroVISOR
        /// <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;
            }
        }