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); }
void AddFromVMesh(List <MeshDrawcall> drawCalls, int index) { var m = Mesh.Meshes[index]; if (m.MaterialCrc == 0 || m.NumRefVertices < 3) { return; } var dc = new MeshDrawcall { Buffer = Mesh.VertexBuffer, BaseVertex = Mesh.VertexOffset + m.StartVertex + StartVertex, StartIndex = Mesh.IndexOffset + m.TriangleStart, PrimitiveCount = m.NumRefVertices / 3, MaterialCrc = m.MaterialCrc }; drawCalls.Add(dc); }