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"); }
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); }
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" }); }
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"); }
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); }
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")); }