Example #1
0
        public static void DoIt()
        {
            var diffuseColor      = "#E6009000";
            var specularGlossines = "#4D0000ff";

            Console.WriteLine("Hello World!");

            var colorDiffuse  = ColorToVector4(ColorTranslator.FromHtml(diffuseColor));
            var colorSpecular = ColorToVector4(ColorTranslator.FromHtml(specularGlossines));

            var material1 = new MaterialBuilder()
                            .WithDoubleSide(true)
                            .WithAlpha(SharpGLTF.Materials.AlphaMode.OPAQUE)
                            .WithSpecularGlossinessShader()
                            .WithChannelParam(KnownChannel.SpecularGlossiness, colorSpecular)
                            .WithChannelParam(KnownChannel.Diffuse, colorDiffuse);

            var mesh = new MeshBuilder <VERTEX>("mesh");

            var prim = mesh.UsePrimitive(material1);

            prim.AddTriangle(new VERTEX(-10, 0, 0), new VERTEX(10, 0, 0), new VERTEX(0, 10, 0));
            prim.AddTriangle(new VERTEX(10, 0, 0), new VERTEX(-10, 0, 0), new VERTEX(0, -10, 0));

            var scene = new SharpGLTF.Scenes.SceneBuilder();

            scene.AddRigidMesh(mesh, Matrix4x4.Identity);
            var model = scene.ToGltf2();

            model.SaveGLTF("mesh.gtlf");

            MessageBox.Show($"model mesh.gltf is created");
        }
Example #2
0
        public static void CreateGltf(PolyhedralSurface triangulatedGeometry, string outputfile)
        {
            // convert to glTF to be able to inspect the result...
            var material1 = new MaterialBuilder()
                            .WithDoubleSide(true)
                            .WithSpecularGlossinessShader()
                            .WithChannelParam(KnownChannel.SpecularGlossiness, new Vector4(0.7f, 0, 0f, 1.0f))
                            .WithEmissive(new Vector3(0.2f, 0.3f, 0.1f));

            var mesh = new MeshBuilder <VERTEX>("mesh");

            var prim = mesh.UsePrimitive(material1);

            foreach (var t in triangulatedGeometry.Geometries)
            {
                prim.AddTriangle(
                    new VERTEX((float)t.ExteriorRing.Points[0].X, (float)t.ExteriorRing.Points[0].Y, (float)t.ExteriorRing.Points[0].Z),
                    new VERTEX((float)t.ExteriorRing.Points[1].X, (float)t.ExteriorRing.Points[1].Y, (float)t.ExteriorRing.Points[1].Z),
                    new VERTEX((float)t.ExteriorRing.Points[2].X, (float)t.ExteriorRing.Points[2].Y, (float)t.ExteriorRing.Points[2].Z));
            }

            var scene = new SharpGLTF.Scenes.SceneBuilder();

            scene.AddRigidMesh(mesh, Matrix4x4.Identity);
            var model = scene.ToGltf2();

            model.SaveGLTF(outputfile);
        }
Example #3
0
        public List <string> SaveAs(SWglTFModel Model, string Path, string Name)
        {
            var scene = new SharpGLTF.Scenes.SceneBuilder();

            foreach (var Body in Model.BodyList)
            {
                //创建一个网格
                var Mesh = new MeshBuilder <VERTEX>("mesh");


                var material = (Body.MaterialBuilder == null ? Model.MaterialBuilder : Body.MaterialBuilder);
                if (material == null)
                {
                    material = new MaterialBuilder()
                               .WithDoubleSide(true)
                               .WithMetallicRoughnessShader()
                               .WithChannelParam("BaseColor", new Vector4(1, 0, 0, 1));
                }
                //确定材质属性
                var prim = Mesh.UsePrimitive(material
                                             );

                foreach (var face in Body.FaceList)
                {
                    foreach (var tri in face.FaceTri)
                    {
                        prim.AddTriangle(tri.a, tri.b, tri.c);
                    }
                }

                scene.AddMesh(Mesh, Body.BodyTransform);
            }


            var model = scene.ToSchema2();

            model.SaveAsWavefront(Path + "\\" + Name + ".obj");
            model.SaveGLB(Path + "\\" + Name + ".glb");
            model.SaveGLTF(Path + "\\" + Name + ".gltf");
            return(new List <string>()
            {
                Path + "\\" + Name + ".obj",
                Path + "\\" + Name + ".glb",
                Path + "\\" + Name + ".gltf"
            });
        }
Example #4
0
        static void Main(string[] args)
        {
            // create two materials

            var material1 = new MaterialBuilder()
                            .WithDoubleSide(true)
                            .WithMetallicRoughnessShader()
                            .WithChannelParam(KnownChannel.BaseColor, KnownProperty.RGBA, new Vector4(1, 0, 0, 1));

            var material2 = new MaterialBuilder()
                            .WithDoubleSide(true)
                            .WithMetallicRoughnessShader()
                            .WithChannelParam(KnownChannel.BaseColor, KnownProperty.RGBA, new Vector4(1, 0, 1, 1));

            // create a mesh with two primitives, one for each material

            var mesh = new MeshBuilder <VERTEX>("mesh");

            var prim = mesh.UsePrimitive(material1);

            prim.AddTriangle(new VERTEX(-10, 0, 0), new VERTEX(10, 0, 0), new VERTEX(0, 10, 0));
            prim.AddTriangle(new VERTEX(10, 0, 0), new VERTEX(-10, 0, 0), new VERTEX(0, -10, 0));

            prim = mesh.UsePrimitive(material2);
            prim.AddQuadrangle(new VERTEX(-5, 0, 3), new VERTEX(0, -5, 3), new VERTEX(5, 0, 3), new VERTEX(0, 5, 3));

            // create a scene

            var scene = new SharpGLTF.Scenes.SceneBuilder();

            scene.AddRigidMesh(mesh, Matrix4x4.Identity);

            // save the model in different formats

            var model = scene.ToGltf2();

            model.SaveAsWavefront("mesh.obj");
            model.SaveGLB("mesh.glb");
            model.SaveGLTF("mesh.gltf");
        }
Example #5
0
        public async Task <List <string> > SaveAsAsync(SWglTFModel Model, string Path, string Name)
        {
            var scene = new SharpGLTF.Scenes.SceneBuilder();

            foreach (var Body in Model.BodyList)
            {
                foreach (var face in Body.FaceList)
                {
                    var Mesh = new MeshBuilder <VERTEX>("mesh");
                    //确定材质属性
                    var prim = Mesh.UsePrimitive(
                        (Body.MaterialBuilder == null ? Model.MaterialBuilder : Body.MaterialBuilder)
                        );


                    foreach (var tri in face.FaceTri)
                    {
                        prim.AddTriangle(tri.a, tri.b, tri.c);
                    }
                    scene.AddMesh(Mesh, Body.BodyTransform);
                }
            }
            var model = scene.ToSchema2();

            model.SaveAsWavefront(Path + "\\" + Name + ".obj");
            model.SaveGLB(Path + "\\" + Name + ".glb");
            model.SaveGLTF(Path + "\\" + Name + ".gltf");
            List <string> res = new List <string>()
            {
                Path + "\\" + Name + ".obj",
                Path + "\\" + Name + ".glb",
                Path + "\\" + Name + ".gltf"
            };

            return(res);
        }
Example #6
0
        private static void ContainedMeshToGLTF(List <RawMeshContainer> meshes, FileInfo outfile)
        {
            var scene = new SharpGLTF.Scenes.SceneBuilder();

            int mIndex = -1;

            foreach (var mesh in meshes)
            {
                ++mIndex;
                long indCount = mesh.indices.Length;
                var  expmesh  = new MESH(string.Format(Path.GetFileNameWithoutExtension(outfile.FullName) + "_mesh_{0}", mIndex));

                var prim = expmesh.UsePrimitive(new MaterialBuilder("Default"));
                for (long i = 0; i < indCount; i += 3)
                {
                    uint idx0 = mesh.indices[i + 1];
                    uint idx1 = mesh.indices[i];
                    uint idx2 = mesh.indices[i + 2];

                    //VPNT
                    Vec3 p_0 = new Vec3(mesh.vertices[idx0].X, mesh.vertices[idx0].Y, mesh.vertices[idx0].Z);
                    Vec3 n_0 = new Vec3(mesh.normals[idx0].X, mesh.normals[idx0].Y, mesh.normals[idx0].Z);
                    Vec4 t_0 = new Vec4(new Vec3(mesh.tangents[idx0].X, mesh.tangents[idx0].Y, mesh.tangents[idx0].Z), 1);

                    Vec3 p_1 = new Vec3(mesh.vertices[idx1].X, mesh.vertices[idx1].Y, mesh.vertices[idx1].Z);
                    Vec3 n_1 = new Vec3(mesh.normals[idx1].X, mesh.normals[idx1].Y, mesh.normals[idx1].Z);
                    Vec4 t_1 = new Vec4(new Vec3(mesh.tangents[idx1].X, mesh.tangents[idx1].Y, mesh.tangents[idx1].Z), 1);

                    Vec3 p_2 = new Vec3(mesh.vertices[idx2].X, mesh.vertices[idx2].Y, mesh.vertices[idx2].Z);
                    Vec3 n_2 = new Vec3(mesh.normals[idx2].X, mesh.normals[idx2].Y, mesh.normals[idx2].Z);
                    Vec4 t_2 = new Vec4(new Vec3(mesh.tangents[idx2].X, mesh.tangents[idx2].Y, mesh.tangents[idx2].Z), 1);

                    //VCT
                    Vec2 tx0_0 = new Vec2(mesh.tx0coords[idx0].X, mesh.tx0coords[idx0].Y);
                    Vec2 tx1_0 = new Vec2(mesh.tx1coords[idx0].X, mesh.tx1coords[idx0].Y);

                    Vec2 tx0_1 = new Vec2(mesh.tx0coords[idx1].X, mesh.tx0coords[idx1].Y);
                    Vec2 tx1_1 = new Vec2(mesh.tx1coords[idx1].X, mesh.tx1coords[idx1].Y);

                    Vec2 tx0_2 = new Vec2(mesh.tx0coords[idx2].X, mesh.tx0coords[idx2].Y);
                    Vec2 tx1_2 = new Vec2(mesh.tx1coords[idx2].X, mesh.tx1coords[idx2].Y);

                    Vec4 col_0 = new Vec4(mesh.colors[idx0].X, mesh.colors[idx0].Y, mesh.colors[idx0].Z, mesh.colors[idx0].W);
                    Vec4 col_1 = new Vec4(mesh.colors[idx1].X, mesh.colors[idx1].Y, mesh.colors[idx1].Z, mesh.colors[idx1].W);
                    Vec4 col_2 = new Vec4(mesh.colors[idx2].X, mesh.colors[idx2].Y, mesh.colors[idx2].Z, mesh.colors[idx2].W);

                    // vertex build
                    var v0 = new VERTEX(new VPNT(p_0, n_0, t_0), new VCT(col_0, tx0_0, tx1_0));
                    var v1 = new VERTEX(new VPNT(p_1, n_1, t_1), new VCT(col_1, tx0_1, tx1_1));
                    var v2 = new VERTEX(new VPNT(p_2, n_2, t_2), new VCT(col_2, tx0_2, tx1_2));

                    // triangle build
                    prim.AddTriangle(v0, v1, v2);
                }
                scene.AddRigidMesh(expmesh, System.Numerics.Matrix4x4.Identity);
            }

            var model = scene.ToGltf2();

            model.SaveGLB(Path.GetFullPath(outfile.FullName).Replace(".mesh", ".glb"));
        }