Esempio n. 1
0
        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();
            }
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        // 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);
        }
Esempio n. 4
0
 public void Init()
 {
     voxels  = new GPUVoxelData(resolution, size);
     gpuMesh = new GPUMesh(voxels.Volume * 5);
 }
Esempio n. 5
0
        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);
        }