tiramisu/geometry
Types
3D geometry types supported by the engine.
Each variant represents a different primitive shape or custom geometry.
Use the validated constructor functions like box()
, sphere()
, etc.
pub opaque type Geometry
pub type GeometryError {
NonPositiveWidth(width: Float)
NonPositiveHeight(height: Float)
NonPositiveDepth(depth: Float)
NonPositiveRadius(radius: Float)
InvalidGeometryTube(tube: Float)
LessThanThreeSegmentCountWidth(count: Int)
LessThanTwoSegmentCountHeight(count: Int)
NegativeSegmentCount(count: Int)
}
Constructors
-
NonPositiveWidth(width: Float)
-
NonPositiveHeight(height: Float)
-
NonPositiveDepth(depth: Float)
-
NonPositiveRadius(radius: Float)
-
InvalidGeometryTube(tube: Float)
-
LessThanThreeSegmentCountWidth(count: Int)
-
LessThanTwoSegmentCountHeight(count: Int)
-
NegativeSegmentCount(count: Int)
Values
pub fn box(
width width: Float,
height height: Float,
depth depth: Float,
) -> Result(Geometry, GeometryError)
Create a validated box geometry.
All dimensions must be positive (> 0).
Example
let assert Ok(cube) = scene.box(width: 1.0, height: 1.0, depth: 1.0)
let assert Ok(wall) = scene.box(width: 10.0, height: 3.0, depth: 0.1)
pub fn circle(
radius radius: Float,
segments segments: Int,
) -> Result(Geometry, GeometryError)
pub fn cone(
radius radius: Float,
height height: Float,
segments segments: Int,
) -> Result(Geometry, GeometryError)
pub fn custom_geometry(
geometry geometry: asset.BufferGeometry,
) -> Geometry
pub fn cylinder(
radius_top radius_top: Float,
radius_bottom radius_bottom: Float,
height height: Float,
radial_segments radial_segments: Int,
) -> Result(Geometry, GeometryError)
Create a validated cylinder geometry.
Both radii must be non-negative, height positive, radial segments >= 3. Set one radius to 0 to create a cone shape.
Example
let assert Ok(cylinder) = scene.cylinder(radius_top: 1.0, radius_bottom: 1.0, height: 2.0, radial_segments: 32)
let assert Ok(cone) = scene.cylinder(radius_top: 0.0, radius_bottom: 1.0, height: 2.0, radial_segments: 32)
pub fn icosahedron(
radius radius: Float,
detail detail: Int,
) -> Result(Geometry, GeometryError)
Create a validated icosahedron (20-sided polyhedron) geometry.
Detail level controls subdivision. Good for creating spheres with flat faces.
Example
let assert Ok(shape) = scene.icosahedron(radius: 1.0, detail: 2)
pub fn plane(
width width: Float,
height height: Float,
) -> Result(Geometry, GeometryError)
pub fn sphere(
radius radius: Float,
width_segments width_segments: Int,
height_segments height_segments: Int,
) -> Result(Geometry, GeometryError)
Create a validated sphere geometry.
Radius must be positive. Width segments >= 3, height segments >= 2. More segments = smoother sphere but more triangles.
Example
let assert Ok(ball) = scene.sphere(radius: 1.0, width_segments: 32, height_segments: 16)
let assert Ok(low_poly) = scene.sphere(radius: 1.0, width_segments: 8, height_segments: 6)
pub fn tetrahedron(
radius radius: Float,
detail detail: Int,
) -> Result(Geometry, GeometryError)
Create a validated tetrahedron (4-sided polyhedron) geometry.
Detail level controls subdivision (0 = no subdivision, higher = more triangles).
Example
let assert Ok(shape) = scene.tetrahedron(radius: 1.0, detail: 0)
pub fn torus(
radius radius: Float,
tube tube: Float,
radial_segments radial_segments: Int,
tubular_segments tubular_segments: Int,
) -> Result(Geometry, GeometryError)
Create a validated torus (donut) geometry.
Example
let assert Ok(donut) = scene.torus(radius: 2.0, tube: 0.5, radial_segments: 16, tubular_segments: 100)