public Mesh3V3N GenerateMesh()
        {
            var vertex3V3Ns = new List <Vertex3V3N>();

            for (var i = -1; i <= TerrainWidth + 1; i++)
            {
                for (var j = -1; j <= TerrainHeight + 1; j++)
                {
                    var vertex3V3N = CalculateVertex(i, j);
                    vertex3V3Ns.Add(vertex3V3N);
                }
            }
            var tempMesh = new Mesh3V3N(vertex3V3Ns, CreateFacesForColumnMajorList(TerrainWidth + 2, TerrainHeight + 2));

            tempMesh.CalculateNormals();

            var vertices = new List <Vertex3V3N>();

            for (var i = 0; i <= TerrainWidth; i++)
            {
                for (var j = 0; j <= TerrainHeight; j++)
                {
                    var offset = (TerrainHeight + 3) * (i + 1) + j + 1;
                    vertices.Add(tempMesh.Vertices[offset]);
                }
            }

            var mesh3V3N = new Mesh3V3N(vertices, CreateFacesForColumnMajorList(TerrainWidth, TerrainHeight));

            return(mesh3V3N);
        }
        public Mesh3V3N GenerateMesh()
        {
            var vertex3V3Ns = new List<Vertex3V3N>();
            for (var i = -1; i <= TerrainWidth + 1; i++)
            {
                for (var j = -1; j <= TerrainHeight + 1; j++)
                {
                    var vertex3V3N = CalculateVertex(i, j);
                    vertex3V3Ns.Add(vertex3V3N);
                }
            }
            var tempMesh = new Mesh3V3N(vertex3V3Ns, CreateFacesForColumnMajorList(TerrainWidth + 2, TerrainHeight + 2));
            tempMesh.CalculateNormals();

            var vertices = new List<Vertex3V3N>();
            for (var i = 0; i <= TerrainWidth; i++)
            {
                for (var j = 0; j <= TerrainHeight; j++)
                {
                    var offset = (TerrainHeight + 3)*(i + 1) + j + 1;
                    vertices.Add(tempMesh.Vertices[offset]);
                }
            }

            var mesh3V3N = new Mesh3V3N(vertices, CreateFacesForColumnMajorList(TerrainWidth, TerrainHeight));
            return mesh3V3N;
        }
        public RenderableMesh AllocateResourceFor(Mesh3V3N mesh)
        {
            var vertexBuffer = CreateVertexBuffer(mesh);
            var elementBuffer = CreateElementBuffer(mesh);
            //var vertexArrayObject = CreateAndSetupVertexArrayObject(vertexBuffer, elementBuffer);

            return new RenderableMesh(vertexBuffer, elementBuffer, null, mesh.Faces.Length, this);
        }
        private VertexBufferObject<Vertex3V3N> CreateVertexBuffer(Mesh3V3N mesh)
        {
            var vertexBuffer = _resourceFactory.CreateVertexBufferObject<Vertex3V3N>(BufferTarget.ArrayBuffer);

            vertexBuffer.Bind();
            vertexBuffer.Data(mesh.Vertices);
            vertexBuffer.Unbind();

            return vertexBuffer;
        }
        private VertexBufferObject<uint> CreateElementBuffer(Mesh3V3N mesh)
        {
            //Todo pick index type depending on mesh size
            if (mesh.Vertices.LongLength > uint.MaxValue) throw new NotImplementedException();

            var indices = mesh.Faces.SelectMany(x => new[] { (uint)x.V0, (uint)x.V1, (uint)x.V2 }).ToArray();
            var elementBuffer = _resourceFactory.CreateVertexBufferObject<uint>(BufferTarget.ElementArrayBuffer, sizeof(uint));
            elementBuffer.Bind();

            elementBuffer.Data(indices);
            elementBuffer.Unbind();

            return elementBuffer;
        }
 public void Update(Mesh3V3N mesh)
 {
     Mesh = mesh;
     IsDirty = true;
 }
 public void Update(Mesh3V3N mesh)
 {
     _vertexBuffer.Bind();
     _vertexBuffer.Data(mesh.Vertices, BufferUsageHint.StaticDraw);
     _vertexBuffer.Unbind();
 }
 public OceanComponent(Mesh3V3N mesh)
 {
     Mesh = mesh;
 }