I am new to CGAL, so I do not know where to start.
I want CGAL to calculate a delaunay triangulation of a set of points in 2D. My problem is that there is a class for nonperiodic systems and another one for periodic systems (sorry, can not post more than 2 links), but none for mixed periodic and nonperiodic systems.
Imagine something like this, which is periodic in x direction.
For your information: The vertices near the upper und lower boundary are connected to vertices far from y=0, but this not particularly relevant to the problem.
Is there any easy way to achieve this or do I need to implement this manually?
The 2D Periodic triangulation package in CGAL only handle periodicity in the x and y direction (i.e triangulation in the two dimensional flat torus).
Related
I'm a newbie to CGAL library. However, I think it's a very suitable package for what I want to do.
I have a set of points representing a 3D surface (as shown in figure 1).
I want to fit a 3d triangulation on this surface. The surface is not closed and therefore does not occupy a volume. The code provided in poisson_reconstruction_example.cpp seems appropriate for this job. But the problem is that as a part of poisson_reconstruction algorithm it closes the ends and underneath of the surface to make it a volume (see figure2).
I was wondering:
1- Is there a way to do the triangulation on the surface just defined by the points, without getting a closed surface which encloses a finite volume?
This means that the final triangulation has boundary edges.
I'm happy with any Upsampling or smoothing which may be needed.
2- If the answer to the first question is no, then, is there any way to guarantee that the input points are the vertices of the generated triangles?
The poisson surface reconstruction generates a close surface that interpolates the point cloud given as input. It requires as input a point set with normals.
If you need a algorithm that only uses input points in the output, you can try the Advancing Front Surface Reconstruction algorithm.
I am using the new Kinect v2 and I am getting the depth map of the Kinect.
After I get the depth map I convert the depth data from Depth Space to Camera Space.
As far as I understand this is done, by converting all the X,Y coordinate of each pixel to Camera Space + adding the depth value as Z coordinate (also Kinect gives the depth value in millimetres so it is also converted to hold meters).
Because of this, the point cloud is actually on 2D grid extended with the depth value. The visualization also confirms this, since it is easy to notice that the points are ordered in a grid due to the above conversation.
For visualization I am using OpenGL the old fashion way (glBegin(...) and glEnd()).
I want to create a mesh out of the points. I kind of managed to do it with GL_TRIANGLES, but then I have lot of duplicated vertices and edges. So I thought I should create a better triangulation with GL_TRIANGLE_STRIP, but I am stuck here because I can't come up with a good algorithm which can go through my 2D grid in a way that I can feed it to the GL_TRIANGLE_STRIP so it creates a nice surface.
The problems:
For each triangle's vertices I am checking the Z coordinate. If it exceeds a certain threshold I disregard the triangle => this might create holes in my 2D grid.
Some depth values are NaN, because the Kinect can't "see" there nothing (for example an object is too far or too close) => this also creates holes in the 2D grid.
Anybody has any suggestion what would be the best method to solve this issue?
If you're able to use the point cloud library, you could use the
class pcl::OrganizedFastMesh< PointInT >.
http://docs.pointclouds.org/trunk/classpcl_1_1_organized_fast_mesh.html
I use it to triangulate complete depth frames.
You can try also a delanauy triangulation in 3d and look for the tetrahedons on the exterior. An easy algorithm is the bowyer-watson with tetrahedons and circumspheres. Cgal is a good example.
I have a set of points that need to be constructed as a set of triangular faces to form a solid mesh. I have looked at Delaunay Triangulation and none of it makes sense.
Any advice on where to begin? I am not dealing with complex shapes, they consist of 200 vertices max.
Note: the points are in x,y,z space.
There are variety of options to construct mesh from vertices:
1: You can use Poisson reconstruction
http://www.cs.jhu.edu/~misha/Code/PoissonRecon/Version5.7/
it is also implemented meshlab which is open source http://gmv.cast.uark.edu/scanning/point-clouds-to-mesh-in-meshlab/ and also in PCL http://pointclouds.org/
2: Another option is marching cubes, you can also find an implementation in PCL
all
I try to obtain one triangle mesh from one point cloud. The mesh is expected to be manifold, the triangles are well shaped or equilateral and the distribution of the points are adaptive in terms of the curvature.
There are valuable information provided on this website.
robust algorithm for surface reconstruction from 3D point cloud?
Mesh generation from points with x, y and z coordinates
I try Poisson reconstruction algorithm, but the triangles are not well shaped.
So I need to improve the quality of the triangles. I learn that centroidal voronoi tessellation(CVT) can achieve that, but I don't know whether the operation will introduce non-manifold vertices and self-intersection. I hope to get some information about it from you.
The mesh from the following post looks pretty good.
How to fill polygon with points regularly?
Delaunay refinement algorithm is used. Can delaunay refinement algorithm apply to triangle mesh directly? Do I first need to delaunay triangulation of the point cloud of the mesh, and then use the information from delaunay triangulation to perform delaunay refinement?
Thanks.
Regards
Jogging
I created the image in the mentioned post: You can insert all points into a Delaunay triangulation and then create a Zone object (area) consisting of these triangles. Then you call refine(pZone,...) to get a quality mesh. Other options are to create the Zone from constraint edges or as the result of a boolean operation. However, this library is made for 2D and 2.5D. The 3D version will not be released before 2014.
Do you know the BallPivoting approach?
I have a set of points in 3D that lie on a surface and I also have the normals at every point.
I would like to generate a surface triangulation with this information. In addition I could tell the algorithm to use what points lie on the boundary if that is needed.
So, I have quite a bit of information:
* points
* normals
* boundary
How do I triangulate a surface with this information using vtk?
A surface reconstruction algorithm is like using a bomb for this problem since I have all this information that I would like to use. This information comes from a simulation so I know the surface exists and that is quite smooth.
I would like the answer to be cast in terms of either what vtk function to use and if available (and that would be great) examples using this function.
Thank you so much in advance.
You can use the vtkSurfaceReconstruction filter to create a surface from a set of 3D points.
You could try the point cloud library
Point Cloud Library
Just the 3D points would be good enough. Since you know that your surface is smooth, you can perform a Delaunay triangulation of the points (vtkDelaunay3D) and apply a subdivision filter for smoothening (vtkButterflySubdivisionFilter).
Delaunay3D triangulation