Geometries for 3D rendering, including normals, UVs and cell indices (faces). Perfect if you want to supercharge your dependency folder... with 30KB of geometries.
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,
thetaOffset: 0,
mapping: mappings.elliptical,
});
const disc = Primitives.disc({
radius: 0.5,
segments: 32,
innerSegments: 16,
theta: Math.PI * 2,
thetaOffset: 0,
mapping: mappings.concentric,
});
const superellipse = Primitives.superellipse({
sx: 1,
sy: 0.5,
radius: 0.5,
segments: 32,
innerSegments: 16,
theta: Math.PI * 2,
thetaOffset: 0,
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,
thetaOffset: 0,
mapping: mappings.fgSquircular,
squareness: 0.95,
});
const annulus = Primitives.annulus({
radius: 0.5,
segments: 32,
innerSegments: 16,
theta: Math.PI * 2,
thetaOffset: 0,
innerRadius: 0.25,
mapping: mappings.concentric,
});
const reuleux = Primitives.reuleux({
radius: 0.5,
segments: 32,
innerSegments: 16,
theta: Math.PI * 2,
thetaOffset: 0,
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,
thetaOffset: 0,
phi: Math.PI * 2,
phiOffset: 0,
});
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,
thetaOffset: 0,
phi: Math.PI * 2,
phiOffset: 0,
});
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,
roundSegments: 16,
theta: Math.PI * 2,
});
const torusGeometry = Primitives.torus({
radius: 0.4,
segments: 64,
minorRadius: 0.1,
minorSegments: 32,
theta: Math.PI * 2,
thetaOffset: 0,
phi: Math.PI * 2,
phiOffset: 0,
});
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,
thetaOffset: 0,
});
Re-export all geometries, UV mappings functions and utils.
object
Geometry definition without normals and UVs.
object
Geometry definition.
Re-export all geometries, UV mappings functions and utils.
SimplicialComplex
⏏
object
SimplicialComplex
⏏Kind: Exported function
Param | Type | Default |
---|---|---|
[options] | AnnulusOptions |
{} |
object
Kind: 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
⏏
object
BasicSimplicialComplex
⏏Kind: Exported function
Param | Type | Default |
---|---|---|
[options] | BoxOptions |
{} |
object
Kind: inner typedef of box
Properties
Name | Type | Default |
---|---|---|
[sx] | number |
1 |
[sy] | number |
sx |
[sz] | number |
sx |
SimplicialComplex
⏏
object
SimplicialComplex
⏏Kind: Exported function
Param | Type | Default |
---|---|---|
[options] | CapsuleOptions |
{} |
object
Kind: 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
⏏
object
BasicSimplicialComplex
⏏Kind: Exported function
Param | Type | Default |
---|---|---|
[options] | CircleOptions |
{} |
object
Kind: 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
⏏
object
SimplicialComplex
⏏Kind: Exported function
Param | Type | Default |
---|---|---|
[options] | ConeOptions |
{} |
object
Kind: 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
⏏
object
SimplicialComplex
⏏Kind: Exported function
Param | Type | Default |
---|---|---|
[options] | CubeOptions |
{} |
object
Kind: 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
⏏
object
SimplicialComplex
⏏Kind: Exported function
Param | Type | Default |
---|---|---|
[options] | CylinderOptions |
{} |
object
Kind: 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 |
SimplicialComplex
⏏
object
SimplicialComplex
⏏Kind: Exported function
Param | Type | Default |
---|---|---|
[options] | DiscOptions |
{} |
object
Kind: 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 |
SimplicialComplex
⏏
object
SimplicialComplex
⏏Kind: Exported function
Param | Type | Default |
---|---|---|
[options] | EllipseOptions |
{} |
object
Kind: 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
⏏
object
SimplicialComplex
⏏Default to an oblate spheroid.
Kind: Exported function
Param | Type | Default |
---|---|---|
[options] | EllipsoidOptions |
{} |
object
Kind: inner typedef of ellipsoid
Properties
Name | Type | Default |
---|---|---|
[radius] | number |
0.5 |
[nx] | number |
32 |
[ny] | number |
16 |
[rx] | number |
1 |
[ry] | 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 |
{} |
object
Kind: inner typedef of icosahedron
Properties
Name | Type | Default |
---|---|---|
[radius] | number |
0.5 |
SimplicialComplex
⏏
object
SimplicialComplex
⏏Kind: Exported function
Param | Type | Default |
---|---|---|
[options] | IcosphereOptions |
{} |
object
Kind: 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 |
{} |
object
Kind: 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
⏏
object
SimplicialComplex
⏏Kind: Exported function
Param | Type | Default |
---|---|---|
[options] | QuadOptions |
{} |
object
Kind: inner typedef of quad
Properties
Name | Type | Default |
---|---|---|
[scale] | number |
0.5 |
SimplicialComplex
⏏
object
SimplicialComplex
⏏Kind: Exported function See: Parametric equations for regular and Reuleaux polygons
Param | Type | Default |
---|---|---|
[options] | ReuleuxOptions |
{} |
object
Kind: 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 |
{} |
object
Kind: 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 |
{} |
object
Kind: 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
⏏
object
SimplicialComplex
⏏Kind: Exported function
Param | Type | Default |
---|---|---|
[options] | SphereOptions |
{} |
object
Kind: 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
⏏
object
SimplicialComplex
⏏Fernández-Guasti squircle
Kind: Exported function See: Squircular Calculations – Chamberlain Fong
Param | Type | Default |
---|---|---|
[options] | SquircleOptions |
{} |
object
Kind: 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
⏏
object
SimplicialComplex
⏏Kind: Exported function
Param | Type | Default |
---|---|---|
[options] | StadiumOptions |
{} |
object
Kind: 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 |
{} |
object
Kind: 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 |
{} |
object
Kind: inner typedef of tetrahedron
Properties
Name | Type | Default |
---|---|---|
[radius] | number |
0.5 |
SimplicialComplex
⏏
object
SimplicialComplex
⏏Kind: Exported function
Param | Type | Default |
---|---|---|
[options] | TorusOptions |
{} |
object
Kind: 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 |
number
number
number
Uint8Array
| Uint16Array
| Uint32Array
Array.
number
Two times PI.
Kind: static constant of utils
number
Two times PI.
Kind: static constant of utils
number
Square root of 2.
Kind: static constant of utils
Uint8Array
| Uint16Array
| Uint32Array
Select 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.
Normalize a vector 3.
Kind: static method of utils
Returns: Array.
- Normalized vector
Param | Type | Description |
---|---|---|
v | Array. |
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> |
object
Geometry definition without normals and UVs.
Kind: global typedef Properties
Name | Type |
---|---|
positions | Float32Array |
cells | Uint8Array | Uint16Array | Uint32Array |
object
Geometry 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.