mattdesl/svg-mesh-3d
mattdesl/svg-mesh-3d has 1,223 GitHub stars and 94 forks. GitHot measured 0 stars in 24 hours and +1 in 7 days. Last checked 2026-11-13 03:13 UTC. Last push 2018-11-03.
:rocket: converts a SVG path to a 3D mesh
Measured star growth
- in 24h
- 0
- in 7 days
- +1
- in 15 days
- Collecting history
- in 1 month
- Collecting history
Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.
README.md
Originalsvg-mesh-3d
[
](http://mattdesl.github.io/svg-mesh-3d/)
A high-level module to convert a SVG <path> string into a 3D triangulated mesh. Best suited for silhouettes, like font icon SVGs.
Built on top of cdt2d by @mikolalysenko, and various other modules.
Install
npm install svg-mesh-3d --save
Example
Here is an example using a simple path:
var svgMesh3d = require('svg-mesh-3d')
var path = 'M305.214,374.779c2.463,0,3.45,0.493...'
var mesh = svgMesh3d(path)
The returned mesh is a 3D indexed "simplicial complex" that can be used in ThreeJS, StackGL, etc. It uses arrays for vectors and follows the format:
{
positions: [ [x1, y1, z1], [x2, y2, z2], ... ],
cells: [ [a, b, c], [d, e, f] ]
}
Or, to load a mesh in the browser from an SVG file:
var loadSvg = require('load-svg')
var parsePath = require('extract-svg-path').parse
var svgMesh3d = require('svg-mesh-3d')
loadSvg('svg/logo.svg', function (err, svg) {
if (err) throw err
var svgPath = parsePath(svg)
var mesh = svgMesh3d(svgPath, {
delaunay: false,
scale: 4
})
})
Demos
Source:
- demo/index.js - animated meshes in ThreeJS
- demo/2d.js - drawing Canvas2D
To run the demos from source:
git clone https://github.com/mattdesl/svg-mesh-3d.git
cd svg-mesh-3d
# install dependencies
npm install
# ThreeJS demo
npm run start
# Canvas2D demo
npm run 2d
Usage
mesh = svgMesh3d(svgPath, [opt])
Triangulates the svgPath string into a 3D simplicial complex. The positions in the 3D mesh are normalized to a -1.0 ... 1.0 range.
Options:
delaunay(defaulttrue)- whether to use Delaunay triangulation
- Delaunay triangulation is slower, but looks better
clean(defaulttrue)- whether to run the mesh through clean-pslg
- slower, but often needed for correct triangulation
simplify(default0)- a number, the distance threshold for simplication before triangulation (in pixel space)
- higher number can produce faster triangulation
scale(default1)- a positive number, the scale at which to approximate the curves from the SVG paths
- higher number leads to smoother corners, but slower triangulation
normalize(defaulttrue) a boolean, whether to normalize the positions to-1 .. 1randomization(default0)- a positive number, the amount of extra points to randomly add within the bounding box before triangulation
- higher number can lead to a nicer aesthetic, but slower triangulation
Other options are passed to cdt2d, such as exterior (default false) and interior (default true).
See Also
- extract-svg-path - grab
<path>data from SVG - load-svg - load SVG in browser
- three-simplicial-complex - render meshes in ThreeJS
- cdt2d - constrained delaunay triangulation in 2D
License
MIT, see LICENSE.md for details.
Explore related projects
ytdl-org/youtube-dl
Command-line program to download videos from YouTube.com and other video sites
141,545 starsexcalidraw/excalidraw
Virtual whiteboard for sketching hand-drawn like diagrams
135,559 starsgodotengine/godot
Godot Engine – Multi-platform 2D and 3D game engine
120,049 starsmrdoob/three.js
JavaScript 3D Library.
118,228 stars