Program.cs 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. using System;
  2. using System.Numerics;
  3. using SharpGLTF.Geometry;
  4. using SharpGLTF.Geometry.VertexTypes;
  5. using SharpGLTF.Materials;
  6. using SharpGLTF.Schema2;
  7. namespace PointCloudGalaxy
  8. {
  9. using VERTEX = VertexBuilder<VertexPosition, VertexColor1, VertexEmpty>;
  10. class Program
  11. {
  12. static void Main(string[] args)
  13. {
  14. var material = new MaterialBuilder("material1").WithUnlitShader();
  15. var mesh = VERTEX.CreateCompatibleMesh("points");
  16. // create a point cloud primitive
  17. var pointCloud = mesh.UsePrimitive(material, 1);
  18. var galaxy = new Galaxy();
  19. galaxy.scaleOverPlane = 0.05f;
  20. galaxy.randomJitter = 0.01f;
  21. foreach(var startPoint in galaxy.CreateStarts(50000))
  22. {
  23. pointCloud.AddPoint((startPoint, Vector4.One));
  24. }
  25. galaxy.scaleOverPlane = 0.15f;
  26. galaxy.randomJitter = 0.02f;
  27. foreach (var startPoint in galaxy.CreateStarts(50000))
  28. {
  29. pointCloud.AddPoint((startPoint, new Vector4(0.4f, 0.8f, 0.7f, 1)));
  30. }
  31. galaxy.randomJitter = 0.07f;
  32. foreach (var startPoint in galaxy.CreateStarts(10000))
  33. {
  34. pointCloud.AddPoint((startPoint, new Vector4(0.2f, 0.6f, 0.5f, 1)));
  35. }
  36. // create a new gltf model
  37. var model = ModelRoot.CreateModel();
  38. // add all meshes (just one in this case) to the model
  39. model.CreateMeshes(mesh);
  40. // create a scene, a node, and assign the first mesh (the terrain)
  41. model.UseScene("Default")
  42. .CreateNode().WithMesh(model.LogicalMeshes[0]);
  43. // save the model as GLB
  44. model.SaveGLB("Galaxy.glb");
  45. }
  46. }
  47. }