- Published: 2025-05-28
- Updated: 2025-05-28
- MeshLib Team
What is Point Cloud Triangulation?
Point cloud triangulation is the process of triangulating a point cloud— a set of 3D points captured by LiDAR or other scanning technologies—into a continuous triangular mesh. As such, it transforms raw data into accurate triangular surfaces. This technique is invaluable in 3D mesh processing, computational geometry, and computer graphics. The resulting triangle-based models power modeling efforts, gaming, simulation, etc. With MeshLib, these operations are both simple and swift.
Algorithms to Convert Point Cloud to Mesh
The idea behind point cloud triangulation is, again, about transforming sets of 3D points into continuous, polygonal meshes. First, regression-based plane fitting is employed to approximate local planar patches. Then Delaunay triangulation gets applied to generate triangles from ‘neighborhoods’ in point clouds. Such triangulated meshes reveal coherent surface structures in places where none previously existed. This ensures each triangle reflects an object’s true geometry.
- Evaluating which points are closest and grouping them;
- Filtering out irrelevant or noisy neighbors;
- Projecting and triangulating points via a Delaunay scheme;
- Assembling the resulting triangles into a properly oriented mesh.
How to Turn a Point Cloud into a Mesh?
3D Point Cloud to Mesh
‘Points to Mesh’ is the processing step that turns unorganized XYZ data into a structured 3D mesh by connecting points into solid triangles. This fast, sometimes almost instant, meshing of large point clouds underpins an efficient 3D workflow to build, reconstruct and analyze objects. With robust point cloud triangulation code at your disposal, you gain:
- Precise measurements. Continuous surfaces enable accurate dimensional analysis at any scale;
- Structural insights. Coherent faces support load, material and defect assessments
- Richer visuals. Connected polygons produce smoother, more detailed renderings;
- Streamlined workflows. Manifold meshes integrate directly with simulations, FEM tools, and downstream processing;
- Volume and area calculations. Closed meshes allow reliable volume measurements, while you can compute the area of each triangle for quality checks.
How to Create a Triangle Mesh from Point Cloud using Python & C++ (Code Examples)
from meshlib import mrmeshpy as mm
from pathlib import Path
wdir = Path(__file__).parent
pc = mm.loadPoints(wdir / "Nefertiti Points.ply")
nefertiti_mesh = mm.triangulatePointCloud(pc)
mm.saveMesh(nefertiti_mesh, wdir / "Nefertiti Mesh.ctm")
#include
#include
#include
#include
#include
int main()
{
// load points
auto loadRes = MR::PointsLoad::fromAnySupportedFormat( "Nefertiti Points.ply" );
if ( !loadRes.has_value() )
{
std::cerr << loadRes.error() << "\n";
return 1; // error while loading file
}
auto triangulationRes = MR::triangulatePointCloud( *loadRes );
assert( triangulationRes ); // can be nullopt only if canceled by progress callback
auto saveRes = MR::MeshSave::toAnySupportedFormat( *triangulationRes, "Nefertiti Mesh.ctm" );
if ( !saveRes.has_value() )
{
std::cerr << saveRes.error() << "\n";
return 1; // error while saving file
}
return 0;
}


Step-by-Step Point Cloud Triangulation Workflow
- Local neighborhood identification. Separating clouds into spatial clusters of nearest neighbors;
- Plane approximation. Fitting a local plane to each cluster for efficient computations;
- Local Delaunay triangulation. Making well-formed solid triangles in each patch;
- Common-part evaluation. Comparing overlapping triangulations, flagging consistent connections;
- Assembly of reliable triangles. Uniting common parts into a continuous, high-fidelity mesh
By combining these steps—plus optional cleanup passes—we can reconstruct complex 3D objects at scale, delivering smooth surfaces, accurate face connectivity, and immediate effect in any downstream application.
Fusion
The fusion-based alternative is another way. If your point cloud already contains normals, this will be the most straightforward way to turn it into an approximate object mesh. But even when normals are an issue, we have you covered. Our library can build them on its own.
Fusion can be a go-to option when you seek to obtain a preview or draft model before investing time in more detailed reconstruction.
How to Employ the Fusion Function in Python & C++ (Code Examples)
from meshlib import mrmeshpy as mm
points = mm.loadPoints("Nefertiti Points.ply")
params = mm.PointsToMeshParameters()
params.voxelSize = points.computeBoundingBox().diagonal()*2e-3
params.sigma = max(params.voxelSize,mm.findAvgPointsRadius(points,40))
params.minWeight = 1
mesh = mm.pointsToMeshFusion(points,params)
mm.saveMesh(mesh,"Nefertiti Mesh.ctm")
#include
#include
#include "MRMesh/MRBox.h"
#include "MRMesh/MRPointCloudRadius.h"
#include "MRVoxels/MRPointsToMeshFusion.h"
#include
#include
#include
int main()
{
// load points
auto loadRes = MR::PointsLoad::fromAnySupportedFormat( "Nefertiti Points.ply" );
if ( !loadRes.has_value() )
{
std::cerr << loadRes.error() << "\n";
return 1; // error while loading file
}
MR::PointsToMeshParameters params;
params.voxelSize = loadRes->computeBoundingBox().diagonal() * 1e-3f;
params.sigma = std::max( params.voxelSize, MR::findAvgPointsRadius( *loadRes, 40 ) );
params.minWeight = 1.0f;
auto fusionRes = MR::pointsToMeshFusion( *loadRes, params );
if ( !fusionRes.has_value() )
{
std::cerr << fusionRes.error() << "\n";
return 1; // error while saving file
}
auto saveRes = MR::MeshSave::toAnySupportedFormat( *fusionRes, "Nefertiti Mesh.ctm" );
if ( !saveRes.has_value() )
{
std::cerr << saveRes.error() << "\n";
return 1; // error while saving file
}
return 0;
}



Here is how a flow with the ‘Fusion’ option looks:
- First, choose an appropriate voxel size, i.e., the edge length of each cubic voxel in the reconstruction grid. A smaller voxel captures finer detail but requires more processing time. Next, refine the result with two advanced parameters:
- Average-influence neighbours sets how many nearby points are averaged. Higher values smooth the surface but slow processing.
- Min-influence neighbours establishes the minimum combined weight of surrounding points needed to create a triangle, preventing faces in areas where data are sparse.
In addition, one more optional setting can further tailor the workflow:
- It is possible to enable CUDA, shifting computation to an NVIDIA GPU on Windows and Linux systems, accelerating the process.’
Thus, what you do is effectively:
- Load a point cloud (it might already have normals, if it does not, we will build them for you);
- Set the voxel size for your desired balance of speed and quality;
- Optionally, adjust the two neighbour parameters to control smoothing and hole prevention;
- Decide whether to enable CUDA;
- Produce a mesh from your point cloud.
How Fusion Works in Practice
MeshLib—Library to Generate Mesh from Point Cloud
A standout triangulation benefit of our toolbox is its high degree of configurability. Indeed, again, users are free to specify:
- Number of neighbors vs. radius. Decide whether to fix how many nearby points should form each fan, or let the mesh generation flow be driven by a maximum spatial distance around each point;
- Critical angles. Set angles that limit sharp folds in the mesh. That is, any potential fan that exceeds this angle can be discarded;
- Automatic radius increase. For especially intricate datasets, we can intelligently expand the local search radius if initial parameters yield incomplete or invalid triangulations.
How Triangulation Works in Practice: A Video Overview
Two other pros of ours incorporate normal-based checks to ensure faces are oriented consistently. This encompasses:
- Normal creation. Where no normals are present, we can generate them automatically as part of your triangulation flow. If normals are already provided by the user, we will preserve and use those. The user can also choose to regenerate normals;
- Neighbor normal filtering. Discard potential neighbors whose normals deviate excessively, thus avoiding “flipped” triangles or surfaces that fail to align with the underlying geometry.
In this respect, here is a benchmark of our efficiency: on a 12-core machine, with concurrent 24 threads, we correctly oriented normals for a 300 000-point scan, turned into a watertight, manifold mesh, during about 0.5 seconds. Much faster than most popular open-source solutions, all while still preserving surface detail for editing, simulation, or 3D printing.
See our performance benchmark.
API support
Our library is built in native C++, but it also offers official API bindings for C, C#, and Python.
Python Setup Guide
C++ Setup Guide
Concerning version compatibility:
- C++ — Fully supported across all environments.
- Python — Compatible with versions 3.8 through 3.13 across major platforms. Please note:
- Windows: Python 3.8–3.13
- macOS: Python 3.8–3.13 (excluding 3.8 on macOS x64)
- Linux: Python 3.8–3.13 on distributions that support manylinux_2_31+
File Supported for Meshes and Point Clouds
Meshes
Format | Import | Texture Support | Color Support | Export |
---|---|---|---|---|
STL | Yes
| No | No | Yes |
OBJ | Yes
| Yes | Yes | Yes |
OFF | Yes | No | No | Yes |
DXF | Yes | No | No | Yes |
STEP
| Yes
| No | Yes | No |
STP
| Yes | No | Yes | No |
CTM
| Yes | No | Yes | Yes |
3MF | Yes | Yes | Yes | No |
MODEL | Yes | No | No | No |
PLY | Yes | No | Yes | Yes |
GLTF | Yes | Yes | Yes | Yes |
Point clouds
Format | Import | Color Support | Export |
---|---|---|---|
ASC | Yes | Yes | Yes |
CSV | Yes | No | No |
E57 | Yes | Yes | No |
LAS | Yes | Yes | No |
LAZ | Yes | Yes | No |
PTS | Yes | Yes | No |
XYZ | Yes | No | No |
TXT | Yes | No | No |
PLY | Yes | Yes | Yes |
Speaking of licenses, if you are searching for, say, free services for LIDAR point cloud to mesh conversion, MeshLib goes with a Non-Commercial Free License with a Commercial License Requirement. See more details here.
What our customers say
Gal Cohen
CTO, customed.ai

Mariusz Hermansdorfer
Head of Computational Design at Henning Larsen Architechts

HeonJae Cho, DDS, MSD, PhD
Chief Executive Officer, 3DONS INC

Ruedger Rubbert
Chief Technology Officer, Brius Technologies Inc








Start Your Journey with MeshLib
MeshLib SDK offers multiple ways to dive in — from live technical demos to full application trials and hands-on SDK access. No complicated setups or hidden steps. Just the tools you need to start building smarter, faster, and better.
