void Start() { this.instances = new GPUMesh[this.N]; this.paths = new Path[this.N]; // Initialize GPU Instancer this.m = new MeshInstancer(); this.m.Initialize(pathCount: 4); this.p = new PathArrayHelper(this.m); // Add all mesh types to GPU Instancer foreach (var a in this.asteroids) { this.m.AddGPUMeshType(a); } // Do stuff for (int i = 0; i < N; i++) { var mesh = asteroids[Random.Range(0, asteroids.Count)].MeshTypes[0]; instances[i] = new GPUMesh(mesh, this.m); var size = Random.Range(1f, ScaleRange); instances[i].mesh.scale = Vector3.one * size; instances[i].SetRadius(4f * size); // set large enough radius so model doesnt get culled to early instances[i].Initialize(); var path = GetNewPath(); // create new path instances[i].mesh.SetPath(path, this.m); // assign path to instance paths[i] = path; instances[i].Update(); } }
public void BuildMesh() { Mesh?.Dispose(); // Create mesh vertices var vertices = BuildMeshVertices(); if (vertices.Count == 0) { Mesh = null; return; } // Create program-side mesh var mesh = new Mesh <BasicMeshVertex>($"{nameof(World)} program-side mesh", vertices, MeshPrimitiveType.Triangles, false); // Create GPU-side mesh from program-side mesh Mesh = new GPUMesh <BasicMeshVertex>(mesh, ShaderProgram); }
// Mesh generation private void BuildMesh(Vector2 <float> size) { // Create a box var box = new Mesh <BasicMeshVertex>( "City", new BasicMeshVertex[] { new BasicMeshVertex { Position = new Vector3 <float>(size / -2f, 0f), Normal = new Vector3 <float>(0f, 0f, 1f), TexCoord = new Vector2 <float>(0f, 0f) }, new BasicMeshVertex { Position = new Vector3 <float>(size / new Vector2 <float>(2f, -2f), 0f), Normal = new Vector3 <float>(0f, 0f, 1f), TexCoord = new Vector2 <float>(1f, 0f) }, new BasicMeshVertex { Position = new Vector3 <float>(size / 2f, 0f), Normal = new Vector3 <float>(0f, 0f, 1f), TexCoord = new Vector2 <float>(0f, 1f) }, new BasicMeshVertex { Position = new Vector3 <float>(size / new Vector2 <float>(-2f, 2f), 0f), Normal = new Vector3 <float>(0f, 0f, 1f), TexCoord = new Vector2 <float>(1f, 1f) } }, new int[] { 0, 1, 2, 2, 3, 0 }, MeshPrimitiveType.Triangles ); // Make a GPUMesh Mesh = new GPUMesh <BasicMeshVertex>(box, ShaderProgram); }
public void Init() { voxels = new GPUVoxelData(resolution, size); gpuMesh = new GPUMesh(voxels.Volume * 5); }
public EditorCursor(Region region, Vector3 <decimal> position) : base(region, position) { MeshRenderer = new MeshRenderer <BasicMeshVertex>($"{nameof(EditorCursor)}.{nameof(MeshRenderer)}"); var vertices = new BasicMeshVertex[] { // x- new BasicMeshVertex { Position = new Vector3 <float>(0f, 1f, 1f), Normal = new Vector3 <float>(-1f, 0f, 0f), TexCoord = new Vector2 <float>(1f, 0f) }, new BasicMeshVertex { Position = new Vector3 <float>(0f, 0f, 1f), Normal = new Vector3 <float>(-1f, 0f, 0f), TexCoord = new Vector2 <float>(0f, 0f) }, new BasicMeshVertex { Position = new Vector3 <float>(0f, 0f, 0f), Normal = new Vector3 <float>(-1f, 0f, 0f), TexCoord = new Vector2 <float>(0f, 1f) }, new BasicMeshVertex { Position = new Vector3 <float>(0f, 1f, 1f), Normal = new Vector3 <float>(-1f, 0f, 0f), TexCoord = new Vector2 <float>(1f, 0f) }, new BasicMeshVertex { Position = new Vector3 <float>(0f, 0f, 0f), Normal = new Vector3 <float>(-1f, 0f, 0f), TexCoord = new Vector2 <float>(0f, 1f) }, new BasicMeshVertex { Position = new Vector3 <float>(0f, 1f, 0f), Normal = new Vector3 <float>(-1f, 0f, 0f), TexCoord = new Vector2 <float>(1f, 1f) }, // x+ new BasicMeshVertex { Position = new Vector3 <float>(1f, 0f, 1f), Normal = new Vector3 <float>(1f, 0f, 0f), TexCoord = new Vector2 <float>(1f, 0f) }, new BasicMeshVertex { Position = new Vector3 <float>(1f, 1f, 1f), Normal = new Vector3 <float>(1f, 0f, 0f), TexCoord = new Vector2 <float>(0f, 0f) }, new BasicMeshVertex { Position = new Vector3 <float>(1f, 1f, 0f), Normal = new Vector3 <float>(1f, 0f, 0f), TexCoord = new Vector2 <float>(0f, 1f) }, new BasicMeshVertex { Position = new Vector3 <float>(1f, 0f, 1f), Normal = new Vector3 <float>(1f, 0f, 0f), TexCoord = new Vector2 <float>(1f, 0f) }, new BasicMeshVertex { Position = new Vector3 <float>(1f, 1f, 0f), Normal = new Vector3 <float>(1f, 0f, 0f), TexCoord = new Vector2 <float>(0f, 1f) }, new BasicMeshVertex { Position = new Vector3 <float>(1f, 0f, 0f), Normal = new Vector3 <float>(1f, 0f, 0f), TexCoord = new Vector2 <float>(1f, 1f) }, // y- new BasicMeshVertex { Position = new Vector3 <float>(0f, 0f, 1f), Normal = new Vector3 <float>(0f, -1f, 0f), TexCoord = new Vector2 <float>(0f, 0f) }, new BasicMeshVertex { Position = new Vector3 <float>(1f, 0f, 1f), Normal = new Vector3 <float>(0f, -1f, 0f), TexCoord = new Vector2 <float>(1f, 0f) }, new BasicMeshVertex { Position = new Vector3 <float>(1f, 0f, 0f), Normal = new Vector3 <float>(0f, -1f, 0f), TexCoord = new Vector2 <float>(1f, 1f) }, new BasicMeshVertex { Position = new Vector3 <float>(0f, 0f, 1f), Normal = new Vector3 <float>(0f, -1f, 0f), TexCoord = new Vector2 <float>(0f, 0f) }, new BasicMeshVertex { Position = new Vector3 <float>(1f, 0f, 0f), Normal = new Vector3 <float>(0f, -1f, 0f), TexCoord = new Vector2 <float>(1f, 1f) }, new BasicMeshVertex { Position = new Vector3 <float>(0f, 0f, 0f), Normal = new Vector3 <float>(0f, -1f, 0f), TexCoord = new Vector2 <float>(0f, 1f) }, // y+ new BasicMeshVertex { Position = new Vector3 <float>(1f, 1f, 1f), Normal = new Vector3 <float>(0f, -1f, 0f), TexCoord = new Vector2 <float>(0f, 0f) }, new BasicMeshVertex { Position = new Vector3 <float>(0f, 1f, 1f), Normal = new Vector3 <float>(0f, -1f, 0f), TexCoord = new Vector2 <float>(1f, 0f) }, new BasicMeshVertex { Position = new Vector3 <float>(0f, 1f, 0f), Normal = new Vector3 <float>(0f, -1f, 0f), TexCoord = new Vector2 <float>(1f, 1f) }, new BasicMeshVertex { Position = new Vector3 <float>(1f, 1f, 1f), Normal = new Vector3 <float>(0f, -1f, 0f), TexCoord = new Vector2 <float>(0f, 0f) }, new BasicMeshVertex { Position = new Vector3 <float>(0f, 1f, 0f), Normal = new Vector3 <float>(0f, -1f, 0f), TexCoord = new Vector2 <float>(1f, 1f) }, new BasicMeshVertex { Position = new Vector3 <float>(1f, 1f, 0f), Normal = new Vector3 <float>(0f, -1f, 0f), TexCoord = new Vector2 <float>(0f, 1f) }, }; var mesh = new Mesh <BasicMeshVertex>($"{nameof(World)} program-side mesh", vertices, MeshPrimitiveType.Triangles, false); Mesh = new GPUMesh <BasicMeshVertex>(mesh, ShaderProgram); }