Geometries for 3D rendering, including normals, UVs and cell indices (faces). Perfect if you want to supercharge your dependency folder... with 30KB of geometries.

npm install primitive-geometry
Float32Array for geometry data and Uint8Array|Uint16Array|Uint32Array for cells)See difference with v1 here.
See the example and its source.
import Primitives from "primitive-geometry";
const quadGeometry = Primitives.quad({
scale: 0.5,
});
console.log(quadGeometry);
// {
// positions: Float32Array [x, y, z, x, y, z, ...],
// normals: Float32Array [x, y, z, x, y, z, ...]
// uvs: Float32Array [u, v, u, v, ...],
// cells: Uint8/16/32/Array [a, b, c, a, b, c, ...],
// }
const planeGeometry = Primitives.plane({
sx: 1,
sy: 1,
nx: 1,
ny: 1,
direction: "z",
quads: false,
});
const roundedRectangleGeometry = Primitives.roundedRectangle({
sx: 1,
sy: 1,
nx: 1,
ny: 1,
radius: 0.25,
roundSegments: 8,
edgeSegments: 1,
});
const stadiumGeometry = Primitives.stadium({
sx: 1,
sy: 0.5,
nx: 1,
ny: 1,
roundSegments: 8,
edgeSegments: 1,
});
const ellipseGeometry = Primitives.ellipse({
sx: 1,
sy: 0.5,
radius: 0.5,
segments: 32,
innerSegments: 16,
theta: Math.PI * 2,
mapping: mappings.elliptical,
});
const disc = Primitives.disc({
radius: 0.5,
segments: 32,
innerSegments: 16,
theta: Math.PI * 2,
mapping: mappings.concentric,
});
const superellipse = Primitives.superellipse({
sx: 1,
sy: 0.5,
radius: 0.5,
segments: 32,
innerSegments: 16,
theta: Math.PI * 2,
mapping: mappings.lamé,
m: 2,
n: 2,
});
const squircle = Primitives.squircle({
sx: 1,
sy: 1,
radius: 0.5,
segments: 128,
innerSegments: 16,
theta: Math.PI * 2,
mapping: mappings.fgSquircular,
squareness: 0.95,
});
const annulus = Primitives.annulus({
radius: 0.5,
segments: 32,
innerSegments: 16,
theta: Math.PI * 2,
innerRadius: radius * 0.5,
mapping: mappings.concentric,
});
const reuleux = Primitives.reuleux({
radius: 0.5,
segments: 32,
innerSegments: 16,
theta: Math.PI * 2,
mapping: mappings.concentric,
n: 3,
});
const cubeGeometry = Primitives.cube({
sx: 1,
sy: 1,
sz: 1,
nx: 1,
ny: 1,
nz: 1,
});
const roundedCubeGeometry = Primitives.roundedCube({
sx: 1,
sy: 1,
sz: 1,
nx: 1,
ny: 1,
nz: 1,
radius: 0.25,
roundSegments: 8,
edgeSegments: 1,
});
const sphereGeometry = Primitives.sphere({
radius: 0.5,
nx: 32,
ny: 16,
theta: Math.PI,
phi: Math.PI * 2,
});
const icosphereGeometry = Primitives.icosphere({
radius: 0.5,
subdivisions: 2,
});
const ellipsoidGeometry = Primitives.ellipsoid({
radius: 1,
nx: 32,
ny: 16,
rx: 0.5,
ry: 0.25,
rz: 0.25,
theta: Math.PI,
phi: Math.PI * 2,
});
const cylinderGeometry = Primitives.cylinder({
height: 1,
radius: 0.25,
nx: 16,
ny: 1,
radiusApex: 0.25,
capSegments: 1,
capApex: true,
capBase: true,
capBaseSegments: 1,
phi: Math.PI * 2,
});
const coneGeometry = Primitives.cone({
height: 1,
radius: 0.25,
nx: 16,
ny: 1,
capSegments: 1,
capBase: true,
theta: Math.PI * 2,
});
const capsuleGeometry = Primitives.capsule({
height: 0.5,
radius: 0.25,
nx: 16,
ny: 1,
roundedSegments: 16,
theta: Math.PI * 2,
});
const torusGeometry = Primitives.torus({
radius: 0.4,
segments: 64,
minorRadius: 0.1,
minorSegments: 32,
theta: Math.PI * 2,
phi: Math.PI * 2,
});
const tetrahedron = Primitives.tetrahedron({
radius: 0.5,
});
const icosahedron = Primitives.icosahedron({
radius: 0.5,
});
// without normals/uvs
const boxGeometry = Primitives.box({
sx: 1,
sy: 1,
sz: 1,
});
const circleGeometry = Primitives.circle({
radius: 0.5,
segments: 32,
closed: false,
theta: Math.PI * 2,
});
Re-export all geometries, UV mappings functions and utils.
ObjectGeometry definition without normals and UVs.
ObjectGeometry definition.
Re-export all geometries, UV mappings functions and utils.
BasicSimplicialComplex ⏏
ObjectBasicSimplicialComplex ⏏Kind: Exported function
| Param | Type | Default |
|---|---|---|
| [options] | AnnulusOptions |
{} |
ObjectKind: inner typedef of annulus
Properties
| Name | Type | Default |
|---|---|---|
| [radius] | number |
0.5 |
| [segments] | number |
32 |
| [innerSegments] | number |
16 |
| [theta] | number |
TAU |
| [thetaOffset] | number |
0 |
| [innerRadius] | number |
radius * 0.5 |
| [mapping] | function |
mappings.concentric |
BasicSimplicialComplex ⏏
ObjectBasicSimplicialComplex ⏏Kind: Exported function
| Param | Type | Default |
|---|---|---|
| [options] | BoxOptions |
{} |
ObjectKind: inner typedef of box
Properties
| Name | Type | Default |
|---|---|---|
| [sx] | number |
1 |
| [sy] | number |
sx |
| [sz] | number |
sx |
SimplicialComplex ⏏
ObjectSimplicialComplex ⏏Kind: Exported function
| Param | Type | Default |
|---|---|---|
| [options] | CapsuleOptions |
{} |
ObjectKind: inner typedef of capsule
Properties
| Name | Type | Default |
|---|---|---|
| [height] | number |
0.5 |
| [radius] | number |
0.25 |
| [nx] | number |
16 |
| [ny] | number |
1 |
| [roundSegments] | number |
32 |
| [phi] | number |
TAU |
BasicSimplicialComplex ⏏
ObjectBasicSimplicialComplex ⏏Kind: Exported function
| Param | Type | Default |
|---|---|---|
| [options] | CircleOptions |
{} |
ObjectKind: inner typedef of circle
Properties
| Name | Type | Default |
|---|---|---|
| [radius] | number |
0.5 |
| [segments] | number |
32 |
| [theta] | number |
TAU |
| [thetaOffset] | number |
0 |
| [closed] | boolean |
false |
SimplicialComplex ⏏
ObjectSimplicialComplex ⏏Kind: Exported function
| Param | Type | Default |
|---|---|---|
| [options] | ConeOptions |
{} |
ObjectKind: inner typedef of cone
Properties
| Name | Type | Default |
|---|---|---|
| [height] | number |
1 |
| [radius] | number |
0.25 |
| [nx] | number |
16 |
| [ny] | number |
1 |
| [capSegments] | number |
1 |
| [capBase] | boolean |
true |
| [phi] | number |
TAU |
SimplicialComplex ⏏
ObjectSimplicialComplex ⏏Kind: Exported function
| Param | Type | Default |
|---|---|---|
| [options] | CubeOptions |
{} |
ObjectKind: inner typedef of cube
Properties
| Name | Type | Default |
|---|---|---|
| [sx] | number |
1 |
| [sy] | number |
sx |
| [sz] | number |
sx |
| [nx] | number |
1 |
| [ny] | number |
nx |
| [nz] | number |
nx |
SimplicialComplex ⏏
ObjectSimplicialComplex ⏏Kind: Exported function
| Param | Type | Default |
|---|---|---|
| [options] | CylinderOptions |
{} |
ObjectKind: inner typedef of cylinder
Properties
| Name | Type | Default |
|---|---|---|
| [height] | number |
1 |
| [radius] | number |
0.25 |
| [nx] | number |
16 |
| [ny] | number |
1 |
| [radiusApex] | number |
radius |
| [capSegments] | number |
1 |
| [capApex] | boolean |
true |
| [capBase] | boolean |
true |
| [phi] | number |
TAU |
BasicSimplicialComplex ⏏
ObjectBasicSimplicialComplex ⏏Kind: Exported function
| Param | Type | Default |
|---|---|---|
| [options] | DiscOptions |
{} |
ObjectKind: inner typedef of disc
Properties
| Name | Type | Default |
|---|---|---|
| [radius] | number |
0.5 |
| [segments] | number |
32 |
| [innerSegments] | number |
16 |
| [theta] | number |
TAU |
| [thetaOffset] | number |
0 |
| [mapping] | function |
mappings.concentric |
BasicSimplicialComplex ⏏
ObjectBasicSimplicialComplex ⏏Kind: Exported function
| Param | Type | Default |
|---|---|---|
| [options] | EllipseOptions |
{} |
ObjectKind: inner typedef of ellipse
Properties
| Name | Type | Default |
|---|---|---|
| [sx] | number |
1 |
| [sy] | number |
0.5 |
| [radius] | number |
0.5 |
| [segments] | number |
32 |
| [innerSegments] | number |
16 |
| [theta] | number |
TAU |
| [thetaOffset] | number |
0 |
| [mapping] | function |
mappings.elliptical |
SimplicialComplex ⏏
ObjectSimplicialComplex ⏏Default to an oblate spheroid.
Kind: Exported function
| Param | Type | Default |
|---|---|---|
| [options] | EllipsoidOptions |
{} |
ObjectKind: inner typedef of ellipsoid
Properties
| Name | Type | Default |
|---|---|---|
| [radius] | number |
0.5 |
| [nx] | number |
32 |
| [ny] | number |
16 |
| [rx] | number |
1 |
| [rx] | number |
0.5 |
| [rz] | number |
ry |
| [theta] | number |
Math.PI |
| [thetaOffset] | number |
0 |
| [phi] | number |
TAU |
| [phiOffset] | number |
0 |
SimplicialComplex ⏏Kind: Exported function
| Param | Type | Default |
|---|---|---|
| [options] | IcosahedronOptions |
{} |
ObjectKind: inner typedef of icosahedron
Properties
| Name | Type | Default |
|---|---|---|
| [radius] | number |
0.5 |
SimplicialComplex ⏏
ObjectSimplicialComplex ⏏Kind: Exported function
| Param | Type | Default |
|---|---|---|
| [options] | IcosphereOptions |
{} |
ObjectKind: inner typedef of icosphere
Properties
| Name | Type | Default |
|---|---|---|
| [radius] | number |
0.5 |
| [subdivisions] | number |
2 |
SimplicialComplex ⏏
Object"x" | "-x" | "y" | "-y" | "z" | "-z"SimplicialComplex ⏏Kind: Exported function
| Param | Type | Default |
|---|---|---|
| [options] | PlaneOptions |
{} |
ObjectKind: inner typedef of plane
Properties
| Name | Type | Default |
|---|---|---|
| [sx] | number |
1 |
| [sy] | number |
sx |
| [nx] | number |
1 |
| [ny] | number |
nx |
| [direction] | PlaneDirection |
"z" |
| [quads] | boolean |
false |
"x" | "-x" | "y" | "-y" | "z" | "-z"Kind: inner typedef of plane
SimplicialComplex ⏏
ObjectSimplicialComplex ⏏Kind: Exported function
| Param | Type | Default |
|---|---|---|
| [options] | QuadOptions |
{} |
ObjectKind: inner typedef of quad
Properties
| Name | Type | Default |
|---|---|---|
| [scale] | number |
0.5 |
BasicSimplicialComplex ⏏
ObjectBasicSimplicialComplex ⏏Kind: Exported function See: Parametric equations for regular and Reuleaux polygons
| Param | Type | Default |
|---|---|---|
| [options] | ReuleuxOptions |
{} |
ObjectKind: inner typedef of reuleux
Properties
| Name | Type | Default |
|---|---|---|
| [radius] | number |
0.5 |
| [segments] | number |
32 |
| [innerSegments] | number |
16 |
| [theta] | number |
TAU |
| [thetaOffset] | number |
0 |
| [mapping] | function |
mappings.concentric |
| [n] | number |
3 |
SimplicialComplex ⏏Kind: Exported function
| Param | Type | Default |
|---|---|---|
| [options] | RoundedCubeOptions |
{} |
ObjectKind: inner typedef of roundedCube
Properties
| Name | Type | Default |
|---|---|---|
| [sx] | number |
1 |
| [sy] | number |
sx |
| [sz] | number |
sx |
| [nx] | number |
1 |
| [ny] | number |
nx |
| [nz] | number |
nx |
| [radius] | number |
sx * 0.25 |
| [roundSegments] | number |
8 |
| [edgeSegments] | number |
1 |
SimplicialComplex ⏏Kind: Exported function
| Param | Type | Default |
|---|---|---|
| [options] | RoundedCubeOptions |
{} |
ObjectKind: inner typedef of roundedRectangle
Properties
| Name | Type | Default |
|---|---|---|
| [sx] | number |
1 |
| [sy] | number |
sx |
| [nx] | number |
1 |
| [ny] | number |
nx |
| [radius] | number |
sx * 0.25 |
| [roundSegments] | number |
8 |
| [edgeSegments] | number |
1 |
SimplicialComplex ⏏
ObjectSimplicialComplex ⏏Kind: Exported function
| Param | Type | Default |
|---|---|---|
| [options] | SphereOptions |
{} |
ObjectKind: inner typedef of sphere
Properties
| Name | Type | Default |
|---|---|---|
| [radius] | number |
0.5 |
| [nx] | number |
32 |
| [ny] | number |
16 |
| [theta] | number |
Math.PI |
| [thetaOffset] | number |
0 |
| [phi] | number |
TAU |
| [phiOffset] | number |
0 |
SimplicialComplex ⏏
ObjectSimplicialComplex ⏏Fernández-Guasti squircle
Kind: Exported function See: Squircular Calculations – Chamberlain Fong
| Param | Type | Default |
|---|---|---|
| [options] | SquircleOptions |
{} |
ObjectKind: inner typedef of squircle
Properties
| Name | Type | Default | Description |
|---|---|---|---|
| [sx] | number |
1 |
|
| [sy] | number |
1 |
|
| [radius] | number |
0.5 |
|
| [segments] | number |
128 |
|
| [innerSegments] | number |
16 |
|
| [theta] | number |
TAU |
|
| [thetaOffset] | number |
0 |
|
| [mapping] | function |
mappings.fgSquircular |
|
| [squareness] | number |
0.95 |
Squareness (0 < s <= 1) |
SimplicialComplex ⏏
ObjectSimplicialComplex ⏏Kind: Exported function
| Param | Type | Default |
|---|---|---|
| [options] | StadiumOptions |
{} |
ObjectKind: inner typedef of stadium
Properties
| Name | Type | Default |
|---|---|---|
| [sx] | number |
1 |
| [sy] | number |
sx |
| [nx] | number |
1 |
| [ny] | number |
nx |
| [roundSegments] | number |
8 |
| [edgeSegments] | number |
1 |
SimplicialComplex ⏏Lamé curve See elliptical-mapping example for a few special cases
Kind: Exported function See
| Param | Type | Default |
|---|---|---|
| [options] | SuperellipseOptions |
{} |
ObjectKind: inner typedef of superellipse
Properties
| Name | Type | Default |
|---|---|---|
| [sx] | number |
1 |
| [sy] | number |
0.5 |
| [radius] | number |
0.5 |
| [segments] | number |
32 |
| [innerSegments] | number |
16 |
| [theta] | number |
TAU |
| [thetaOffset] | number |
0 |
| [mapping] | function |
mappings.lamé |
| [m] | number |
2 |
| [n] | number |
m |
SimplicialComplex ⏏Kind: Exported function
| Param | Type | Default |
|---|---|---|
| [options] | TetrahedronOptions |
{} |
ObjectKind: inner typedef of tetrahedron
Properties
| Name | Type | Default |
|---|---|---|
| [radius] | number |
0.5 |
SimplicialComplex ⏏
ObjectSimplicialComplex ⏏Kind: Exported function
| Param | Type | Default |
|---|---|---|
| [options] | TorusOptions |
{} |
ObjectKind: inner typedef of torus
Properties
| Name | Type | Default |
|---|---|---|
| [radius] | number |
0.4 |
| [segments] | number |
64 |
| [minorRadius] | number |
0.1 |
| [minorSegments] | number |
32 |
| [theta] | number |
TAU |
| [thetaOffset] | number |
0 |
| [phi] | number |
TAU |
| [phiOffset] | number |
0 |
numbernumbernumberUint8Array | Uint16Array | Uint32ArrayArray.<number>numberTwo times PI.
Kind: static constant of utils
numberTwo times PI.
Kind: static constant of utils
numberSquare root of 2.
Kind: static constant of utils
Uint8Array | Uint16Array | Uint32ArraySelect cells typed array from a size determined by amount of vertices.
Kind: static constant of utils
See: MDN TypedArray objects
| Param | Type | Description |
|---|---|---|
| size | number |
The max value expected |
Array.<number>Normalize a vector 3.
Kind: static method of utils
Returns: Array.<number> - Normalized vector
| Param | Type | Description |
|---|---|---|
| v | Array.<number> |
Vector 3 array |
Ensure first argument passed to the primitive functions is an object
Kind: static method of utils
| Param | Type |
|---|---|
| ...args | * |
Enforce a typed array constructor for cells
Kind: static method of utils
| Param | Type |
|---|---|
| type | Class.<Uint8Array> | Class.<Uint16Array> | Class.<Uint32Array> |
ObjectGeometry definition without normals and UVs.
Kind: global typedef Properties
| Name | Type |
|---|---|
| positions | Float32Array |
| cells | Uint8Array | Uint16Array | Uint32Array |
ObjectGeometry definition.
Kind: global typedef Properties
| Name | Type |
|---|---|
| positions | Float32Array |
| normals | Float32Array |
| uvs | Float32Array |
| cells | Uint8Array | Uint16Array | Uint32Array |
See original packages used in v1:
Differences with v1:
MIT. See license file.