コード例 #1
0
        public OBJ ToOBJ(out MTL mtl)
        {
            OBJ o = new OBJ();
            int v = 0;
            HashSet <String> matnames = new HashSet <string>();

            foreach (var vv in Planes)
            {
                Triangle t = GetTriangle(vv);
                o.Vertices.Add(t.PointA);
                o.Vertices.Add(t.PointB);
                o.Vertices.Add(t.PointC);
                var f = new OBJ.OBJFace();
                f.Material = "mat_" + vv.CollisionType.ToString("X") + "_ID";
                matnames.Add(f.Material);
                f.VertexIndieces.Add(v);
                f.VertexIndieces.Add(v + 1);
                f.VertexIndieces.Add(v + 2);
                o.Faces.Add(f);
                v += 3;
            }
            mtl = new MTL();
            Random r = new Random();

            foreach (string s in matnames)
            {
                MTL.MTLMaterial m = new MTL.MTLMaterial(s);
                m.AmbientColor  = Color.Black;
                m.SpecularColor = Color.FromArgb(85, 85, 85);
                m.DiffuseColor  = Color.FromArgb(r.Next(0, 255), r.Next(0, 255), r.Next(0, 255));
                mtl.Materials.Add(m);
            }
            o.optimizeVertexCount();
            return(o);
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: f0lmer/QPang2OBJ
        static void Main(string[] args)
        {
            QPangMesh q  = new QPangMesh(File.ReadAllBytes(args[0]));
            OBJ       o  = new OBJ();
            int       nr = 0;

            for (int model = 0; model < q.Models.Length; model++)
            {
                for (int mesh = 0; mesh < q.Models[model].Meshes.Length; mesh++)
                {
                    Vector3[] Vertices = q.Models[model].Meshes[mesh].Seps[0].GetPositions();
                    for (int i = 0; i < q.Models[model].Meshes[mesh].NrIndieces; i++)
                    {
                        o.Vertices.Add(Vertices[q.Models[model].Meshes[mesh].Indieces[i]]);
                    }
                    for (int i = 0; i + 2 < q.Models[model].Meshes[mesh].NrIndieces; i += 2)
                    {
                        var f = new OBJ.OBJFace();
                        f.VertexIndieces.Add(nr + i);
                        f.VertexIndieces.Add(nr + i + 1);
                        f.VertexIndieces.Add(nr + i + 2);
                        if (!(o.Vertices[nr + i] == o.Vertices[nr + i + 1] || o.Vertices[nr + i] == o.Vertices[nr + i + 2] || o.Vertices[nr + i + 1] == o.Vertices[nr + i + 2]))
                        {
                            o.Faces.Add(f);
                        }

                        if (i + 3 < q.Models[model].Meshes[mesh].NrIndieces)
                        {
                            var f2 = new OBJ.OBJFace();
                            f2.VertexIndieces.Add(nr + i + 1);
                            f2.VertexIndieces.Add(nr + i + 3);
                            f2.VertexIndieces.Add(nr + i + 2);
                            if (!(o.Vertices[nr + i + 1] == o.Vertices[nr + i + 2] || o.Vertices[nr + i + 1] == o.Vertices[nr + i + 3] || o.Vertices[nr + i + 2] == o.Vertices[nr + i + 3]))
                            {
                                o.Faces.Add(f2);
                            }
                        }
                    }
                    nr += (int)q.Models[model].Meshes[mesh].NrIndieces;
                }
            }
            File.Create("out.obj").Close();
            File.WriteAllBytes("out.obj", o.Write());
        }
コード例 #3
0
ファイル: KCL.cs プロジェクト: RR0000/Odyssave
        public OBJ ToOBJ()
        {
            OBJ o = new OBJ();
            int v = 0;

            foreach (var vv in Planes)
            {
                Triangle t = GetTriangle(vv);
                o.Vertices.Add(t.PointA);
                o.Vertices.Add(t.PointB);
                o.Vertices.Add(t.PointC);
                var f = new OBJ.OBJFace();
                f.Material = vv.CollisionType.ToString("X");
                f.VertexIndieces.Add(v);
                f.VertexIndieces.Add(v + 1);
                f.VertexIndieces.Add(v + 2);
                o.Faces.Add(f);
                v += 3;
            }
            return(o);
        }
コード例 #4
0
            public OBJ ToOBJ()
            {
                OBJ o = new OBJ();

                foreach (var v in Triangles)
                {
                    int baseidx = o.Vertices.Count;
                    o.Vertices.AddRange(v.Vertices);
                    o.TexCoords.AddRange(v.TexCoords);
                    for (int i = 0; i < v.Vertices.Count; i += 3)
                    {
                        OBJ.OBJFace f = new OBJ.OBJFace();
                        f.Material = "M" + v.MaterialId + "M";
                        f.VertexIndieces.Add(baseidx + i);
                        f.VertexIndieces.Add(baseidx + i + 1);
                        f.VertexIndieces.Add(baseidx + i + 2);
                        f.TexCoordIndieces.Add(baseidx + i);
                        f.TexCoordIndieces.Add(baseidx + i + 1);
                        f.TexCoordIndieces.Add(baseidx + i + 2);
                        o.Faces.Add(f);
                    }
                }
                return(o);
            }
コード例 #5
0
ファイル: CGFX.cs プロジェクト: clienthax/EveryFileExplorer
        public OBJ ToOBJ(int Model)
        {
            if (Data.Models.Length == 0 || Data.Models.Length <= Model)
            {
                return(null);
            }
            var o  = new OBJ();
            int v  = 0;
            int vn = 0;
            int vt = 0;
            //int vc = 0;
            int ff = 0;
            var m  = Data.Models[Model];

            //foreach (CMDL m in Models)
            {
                foreach (var vv in m.Shapes)
                {
                    Polygon p   = vv.GetVertexData(m);
                    var     mat = m.Materials[m.Meshes[ff].MaterialIndex];
                    foreach (var q in vv.PrimitiveSets[0].Primitives[0].IndexStreams)
                    {
                        Vector3[] defs = q.GetFaceData();
                        foreach (Vector3 d in defs)
                        {
                            OBJ.OBJFace f = new OBJ.OBJFace();
                            f.Material = mat.Name;
                            o.Vertices.Add(p.Vertex[(int)d.X]);
                            o.Vertices.Add(p.Vertex[(int)d.Y]);
                            o.Vertices.Add(p.Vertex[(int)d.Z]);
                            f.VertexIndieces.Add(v);
                            f.VertexIndieces.Add(v + 1);
                            f.VertexIndieces.Add(v + 2);
                            v += 3;
                            if (p.Normals != null)
                            {
                                o.Normals.Add(p.Normals[(int)d.X]);
                                o.Normals.Add(p.Normals[(int)d.Y]);
                                o.Normals.Add(p.Normals[(int)d.Z]);
                                f.NormalIndieces.Add(vn);
                                f.NormalIndieces.Add(vn + 1);
                                f.NormalIndieces.Add(vn + 2);
                                vn += 3;
                            }
                            if (mat.NrActiveTextureCoordiators > 0 && mat.TextureCoordiators[0].MappingMethod == 0)                            // && mat.TextureCoordiators[0].SourceCoordinate == 0)
                            {
                                if (mat.TextureCoordiators[0].SourceCoordinate == 0)
                                {
                                    o.TexCoords.Add(p.TexCoords[(int)d.X] * new Matrix34(mat.TextureCoordiators[0].Matrix));
                                    o.TexCoords.Add(p.TexCoords[(int)d.Y] * new Matrix34(mat.TextureCoordiators[0].Matrix));
                                    o.TexCoords.Add(p.TexCoords[(int)d.Z] * new Matrix34(mat.TextureCoordiators[0].Matrix));
                                }
                                else if (mat.TextureCoordiators[0].SourceCoordinate == 1)
                                {
                                    o.TexCoords.Add(p.TexCoords2[(int)d.X] * new Matrix34(mat.TextureCoordiators[0].Matrix));
                                    o.TexCoords.Add(p.TexCoords2[(int)d.Y] * new Matrix34(mat.TextureCoordiators[0].Matrix));
                                    o.TexCoords.Add(p.TexCoords2[(int)d.Z] * new Matrix34(mat.TextureCoordiators[0].Matrix));
                                }
                                else
                                {
                                    o.TexCoords.Add(p.TexCoords3[(int)d.X] * new Matrix34(mat.TextureCoordiators[0].Matrix));
                                    o.TexCoords.Add(p.TexCoords3[(int)d.Y] * new Matrix34(mat.TextureCoordiators[0].Matrix));
                                    o.TexCoords.Add(p.TexCoords3[(int)d.Z] * new Matrix34(mat.TextureCoordiators[0].Matrix));
                                }
                            }

                            /*else if (mat.NrActiveTextureCoordiators > 1 && mat.TextureCoordiators[1].MappingMethod == 0 && mat.TextureCoordiators[1].SourceCoordinate == 0)
                             * {
                             *      o.TexCoords.Add(Vector2.Multiply(p.TexCoords[(int)d.X], mat.TextureCoordiators[1].Scale));
                             *      o.TexCoords.Add(Vector2.Multiply(p.TexCoords[(int)d.Y], mat.TextureCoordiators[1].Scale));
                             *      o.TexCoords.Add(Vector2.Multiply(p.TexCoords[(int)d.Z], mat.TextureCoordiators[1].Scale));
                             * }
                             * else if (mat.NrActiveTextureCoordiators > 2 && mat.TextureCoordiators[2].MappingMethod == 0 && mat.TextureCoordiators[2].SourceCoordinate == 0)
                             * {
                             *      o.TexCoords.Add(Vector2.Multiply(p.TexCoords[(int)d.X], mat.TextureCoordiators[2].Scale));
                             *      o.TexCoords.Add(Vector2.Multiply(p.TexCoords[(int)d.Y], mat.TextureCoordiators[2].Scale));
                             *      o.TexCoords.Add(Vector2.Multiply(p.TexCoords[(int)d.Z], mat.TextureCoordiators[2].Scale));
                             * }*/
                            else
                            {
                                goto cont;
                            }
                            f.TexCoordIndieces.Add(vt);
                            f.TexCoordIndieces.Add(vt + 1);
                            f.TexCoordIndieces.Add(vt + 2);
                            vt += 3;
cont:

                            /*if (p.Colors != null)
                             * {
                             *      o.VertexColors.Add(p.Colors[(int)d.X]);
                             *      o.VertexColors.Add(p.Colors[(int)d.Y]);
                             *      o.VertexColors.Add(p.Colors[(int)d.Z]);
                             *      f.VertexColorIndieces.Add(vc);
                             *      f.VertexColorIndieces.Add(vc + 1);
                             *      f.VertexColorIndieces.Add(vc + 2);
                             *      vc += 3;
                             * }*/
                            o.Faces.Add(f);
                        }
                    }
                    ff++;
                }
            }
            return(o);
        }
コード例 #6
0
 public OBJ ToOBJ()
 {
     OBJ o = new OBJ();
     foreach (var v in Triangles)
     {
         int baseidx = o.Vertices.Count;
         o.Vertices.AddRange(v.Vertices);
         o.TexCoords.AddRange(v.TexCoords);
         for (int i = 0; i < v.Vertices.Count; i += 3)
         {
             OBJ.OBJFace f = new OBJ.OBJFace();
             f.Material = "M" + v.MaterialId + "M";
             f.VertexIndieces.Add(baseidx + i);
             f.VertexIndieces.Add(baseidx + i + 1);
             f.VertexIndieces.Add(baseidx + i + 2);
             f.TexCoordIndieces.Add(baseidx + i);
             f.TexCoordIndieces.Add(baseidx + i + 1);
             f.TexCoordIndieces.Add(baseidx + i + 2);
             o.Faces.Add(f);
         }
     }
     return o;
 }
コード例 #7
0
ファイル: CMDL.cs プロジェクト: Ermelber/EveryFileExplorer
        public OBJ ToOBJ()
        {
            var o = new OBJ();
            int v = 0;
            int vn = 0;
            int vt = 0;
            //int vc = 0;
            int ff = 0;
            var m = this;
            //foreach (CMDL m in Models)
            {
                foreach (var vv in m.Shapes)
                {
                    Polygon p = vv.GetVertexData(m);
                    var mat = m.Materials[m.Meshes[ff].MaterialIndex];

                    int TexCoord = -1;
                    if (mat.NrActiveTextureCoordiators > 0 && mat.TextureCoordiators[0].MappingMethod == 0)// && mat.TextureCoordiators[0].SourceCoordinate == 0)
                    {
                        if (mat.TextureCoordiators[0].SourceCoordinate == 0) TexCoord = 0;
                        else if (mat.TextureCoordiators[0].SourceCoordinate == 1) TexCoord = 1;
                        else TexCoord = 2;
                    }

                    foreach (var q in vv.PrimitiveSets[0].Primitives[0].IndexStreams)
                    {
                        Vector3[] defs = q.GetFaceData();
                        foreach (Vector3 d in defs)
                        {
                            OBJ.OBJFace f = new OBJ.OBJFace();
                            f.Material = mat.Name;
                            o.Vertices.Add(p.Vertex[(int)d.X]);
                            o.Vertices.Add(p.Vertex[(int)d.Y]);
                            o.Vertices.Add(p.Vertex[(int)d.Z]);
                            f.VertexIndieces.Add(v);
                            f.VertexIndieces.Add(v + 1);
                            f.VertexIndieces.Add(v + 2);
                            v += 3;
                            if (p.Normals != null)
                            {
                                o.Normals.Add(p.Normals[(int)d.X]);
                                o.Normals.Add(p.Normals[(int)d.Y]);
                                o.Normals.Add(p.Normals[(int)d.Z]);
                                f.NormalIndieces.Add(vn);
                                f.NormalIndieces.Add(vn + 1);
                                f.NormalIndieces.Add(vn + 2);
                                vn += 3;
                            }
                            if (TexCoord == 0)
                            {
                                o.TexCoords.Add(p.TexCoords[(int)d.X] * new Matrix34(mat.TextureCoordiators[0].Matrix));
                                o.TexCoords.Add(p.TexCoords[(int)d.Y] * new Matrix34(mat.TextureCoordiators[0].Matrix));
                                o.TexCoords.Add(p.TexCoords[(int)d.Z] * new Matrix34(mat.TextureCoordiators[0].Matrix));
                            }
                            else if (TexCoord == 1)
                            {
                                o.TexCoords.Add(p.TexCoords2[(int)d.X] * new Matrix34(mat.TextureCoordiators[0].Matrix));
                                o.TexCoords.Add(p.TexCoords2[(int)d.Y] * new Matrix34(mat.TextureCoordiators[0].Matrix));
                                o.TexCoords.Add(p.TexCoords2[(int)d.Z] * new Matrix34(mat.TextureCoordiators[0].Matrix));
                            }
                            else if (TexCoord == 2)
                            {
                                o.TexCoords.Add(p.TexCoords3[(int)d.X] * new Matrix34(mat.TextureCoordiators[0].Matrix));
                                o.TexCoords.Add(p.TexCoords3[(int)d.Y] * new Matrix34(mat.TextureCoordiators[0].Matrix));
                                o.TexCoords.Add(p.TexCoords3[(int)d.Z] * new Matrix34(mat.TextureCoordiators[0].Matrix));
                            }
                            else goto cont;
                            f.TexCoordIndieces.Add(vt);
                            f.TexCoordIndieces.Add(vt + 1);
                            f.TexCoordIndieces.Add(vt + 2);
                            vt += 3;
                        cont:
                            /*if (p.Colors != null)
                            {
                                o.VertexColors.Add(p.Colors[(int)d.X]);
                                o.VertexColors.Add(p.Colors[(int)d.Y]);
                                o.VertexColors.Add(p.Colors[(int)d.Z]);
                                f.VertexColorIndieces.Add(vc);
                                f.VertexColorIndieces.Add(vc + 1);
                                f.VertexColorIndieces.Add(vc + 2);
                                vc += 3;
                            }*/
                            o.Faces.Add(f);
                        }
                    }
                    ff++;
                }
            }
            return o;
        }