mesh create_cylinder_mesh(float radius, float height)
{
    mesh m;

    // Number of samples
    int N = 20;

    // Geometry
    for(int k=0; k<N; ++k)
    {
        float u = k/float(N);
        vec3 p = {radius*std::cos(2*3.14f*u), radius*std::sin(2*3.14f*u), 0.0f};
        m.position.push_back( p );
        m.position.push_back( p+vec3(0,0,height) );
    }

    // Connectivity
    for(int k=0; k<N; ++k)
    {
        int u00 = 2*k;
        int u01 = (2*k+1)%(2*N);
        int u10 = (2*(k+1))%(2*N);
        int u11 = (2*(k+1)+1) % (2*N);

        uint3 t1 = {u00, u10, u11};
        uint3 t2 = {u00, u11, u01};
        m.connectivity.push_back(t1);
        m.connectivity.push_back(t2);
    }

    m.fill_empty_field();
    return m;
}