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; }