コード例 #1
0
        SurModel GetSurModel(LibreLancer.Physics.Sur.ConvexMesh[] meshes, Part part, Color4 color)
        {
            var mdl = new SurModel()
            {
                Part = part
            };

            if (color != surPart)
            {
                mdl.Hardpoint = true;
            }
            var verts   = new List <VertexPositionColor>();
            var indices = new List <short>();

            foreach (var m in meshes)
            {
                mdl.Draws.Add(new SurDrawCall()
                {
                    BaseVertex = verts.Count, Start = indices.Count, Count = m.Indices.Length / 3
                });
                verts.AddRange(m.Vertices.Select(x => new VertexPositionColor(x, color)));
                indices.AddRange(m.Indices.Select(x => (short)x));
            }
            mdl.Vertices = new VertexBuffer(typeof(VertexPositionColor), verts.Count);
            mdl.Vertices.SetData(verts.ToArray());
            mdl.Elements = new ElementBuffer(indices.Count);
            mdl.Elements.SetData(indices.ToArray());
            mdl.Vertices.SetElementBuffer(mdl.Elements);
            return(mdl);
        }
コード例 #2
0
 void ProcessSur(LibreLancer.Physics.Sur.SurFile surfile)
 {
     if (surs != null)
     {
         foreach (var mdl in surs)
         {
             mdl.Vertices.Dispose();
             mdl.Elements.Dispose();
         }
     }
     surs = new List <SurModel>();
     if ((drawable is ModelFile))
     {
         surs.Add(GetSurModel(surfile.GetMesh(0, false), null, surPart));
         foreach (var hpid in surfile.HardpointIds)
         {
             surs.Add(GetSurModel(surfile.GetMesh(hpid, true), null, surHardpoint));
         }
     }
     else
     {
         Dictionary <Part, SurPart> surParts;
         var surHierarchy = ((CmpFile)drawable).ToSurHierarchy(out surParts);
         surfile.FillMeshHierarchy(surHierarchy);
         foreach (var kv in surParts)
         {
             var mdl = new SurModel()
             {
                 Part = kv.Key
             };
             foreach (var hp in kv.Key.Model.Hardpoints)
             {
                 var crc = CrcTool.FLModelCrc(hp.Name);
                 if (surfile.HardpointIds.Contains(crc))
                 {
                     surs.Add(GetSurModel(surfile.GetMesh(crc, true), kv.Key, surHardpoint));
                 }
             }
             if (kv.Value.DisplayMeshes != null)
             {
                 foreach (var msh in kv.Value.DisplayMeshes)
                 {
                     AddVertices(mdl, msh);
                 }
             }
             mdl.Vertices = new VertexBuffer(typeof(VertexPositionColor), mdl.BuildVertices.Count);
             mdl.Vertices.SetData(mdl.BuildVertices.ToArray());
             mdl.BuildVertices = null;
             mdl.Elements      = new ElementBuffer(mdl.BuildIndices.Count);
             mdl.Elements.SetData(mdl.BuildIndices.ToArray());
             mdl.Vertices.SetElementBuffer(mdl.Elements);
             mdl.BuildIndices = null;
             surs.Add(mdl);
         }
     }
 }
コード例 #3
0
        void AddVertices(SurModel mdl, LibreLancer.Physics.Sur.ConvexMesh mesh)
        {
            var baseVertex = mdl.BuildVertices.Count;
            var index      = mdl.BuildIndices.Count;

            mdl.BuildVertices.AddRange(mesh.Vertices.Select(x => new VertexPositionColor(x, surPart)));
            mdl.BuildIndices.AddRange(mesh.Indices.Select(x => (short)x));
            mdl.Draws.Add(new SurDrawCall()
            {
                BaseVertex = baseVertex, Start = index, Count = mesh.Indices.Length / 3
            });
        }