public static byte[] GetGlb(List <Triangle> triangles) { var materialCache = new MaterialsCache(); var default_hex_color = "#D94F33"; // "#bb3333"; var defaultMaterial = MaterialCreator.GetDefaultMaterial(default_hex_color); var mesh = new MeshBuilder <VertexPositionNormal, VertexWithBatchId, VertexEmpty>("mesh"); foreach (var triangle in triangles) { MaterialBuilder material; if (triangle.Shader != null) { material = materialCache.GetMaterialBuilderByShader(triangle.Shader); } else { material = defaultMaterial; } DrawTriangle(triangle, material, mesh); } var scene = new SceneBuilder(); scene.AddRigidMesh(mesh, Matrix4x4.Identity); var model = scene.ToGltf2(); var bytes = model.WriteGLB().Array; return(bytes); }
public MaterialBuilder GetMaterialBuilderByShader(Shader shader) { var res = (from m in materials where m.Shader.Equals(shader) select m).FirstOrDefault(); if (res == null) { var materialBuilder = MaterialCreator.CreateMaterial(shader); res = new MaterialAndShader { Shader = shader, MaterialBuilder = materialBuilder }; materials.Add(res); } return(res.MaterialBuilder); }
public MaterialBuilder GetMaterialBuilderByColor(string color) { var res = (from m in materials where m.Color == color select m).FirstOrDefault(); if (res == null) { // create and add it to List var rgb = ColorTranslator.FromHtml(color); var materialBuilder = MaterialCreator.CreateMaterial(rgb.R, rgb.G, rgb.B); res = new MaterialAndColor { Color = color, MaterialBuilder = materialBuilder }; materials.Add(res); } return(res.MaterialBuilder); }