This example shows how to map an array buffer for dynamic buffer update (useful for animation).
27#include <easy3d/viewer/viewer.h>
28#include <easy3d/renderer/vertex_array_object.h>
29#include <easy3d/renderer/drawable_triangles.h>
30#include <easy3d/util/resource.h>
31#include <easy3d/util/initializer.h>
42int main(
int argc,
char **argv) {
50 Viewer viewer(EXAMPLE_TITLE);
55 const std::vector<vec3> &points = resource::bunny_vertices;
57 const std::vector<unsigned int> &indices = resource::bunny_indices;
65 surface->update_vertex_buffer(points,
true);
69 surface->update_element_buffer(indices);
71 viewer.add_drawable(std::shared_ptr<TrianglesDrawable>(surface));
76 viewer.set_animation(
true);
84 void* pointer = VertexArrayObject::map_buffer(GL_ARRAY_BUFFER, surface->vertex_buffer(), GL_WRITE_ONLY);
86 vec3* vertices =
reinterpret_cast<vec3*
>(pointer);
90 static float total_scale = 1.0f;
92 if (total_scale > 1.5f) {
93 scale = 1.0f / total_scale;
99 for (std::size_t i=0; i<points.size(); ++i)
100 vertices[i].z *= scale;
103 VertexArrayObject::unmap_buffer(GL_ARRAY_BUFFER, surface->vertex_buffer());
The drawable for rendering a set of triangles, e.g., the surface of a triangular mesh.
Definition drawable_triangles.h:46
The built-in Easy3D viewer.
Definition viewer.h:63
Definition collider.cpp:182