Skip to content

Context3D

@ripl/3d

3D rendering context extending CanvasContext with projection.

Overview

Classes: Context3D

Interfaces: Context3DOptions

Type Aliases: LightMode

Functions: createContext

Context3D class

3D rendering context extending the Canvas context with view/projection matrices and a face buffer for painter's algorithm sorting.

ts
class Context3D extends CanvasContext

Constructor:

Parameters:

NameTypeDescription
targetstring | HTMLElement
options?Context3DOptions | undefined

Properties:

PropertyTypeDescription
viewMatrixMatrix4
projectionMatrixMatrix4
viewProjectionMatrixMatrix4
lightDirectionVector3
lightModeLightMode
faceBufferProjectedFace3D[]
fillstring
filterstring
directionDirection
fontstring
fontKerningFontKerning
opacitynumber
globalCompositeOperationunknown
lineCapLineCap
lineDashnumber[]
lineDashOffsetnumber
lineJoinLineJoin
lineWidthnumber
miterLimitnumber
shadowBlurnumber
shadowColorstring
shadowOffsetXnumber
shadowOffsetYnumber
strokestring
textAlignTextAlignment
textBaselineTextBaseline
readonly typestring
readonly rootHTMLElement
readonly elementHTMLCanvasElement
bufferboolean
widthnumber
heightnumber
scaleXScale<number, number>
scaleYScale<number, number>
scaleDPRScale<number, number>
renderElementRenderElement | undefined
renderedElementsRenderElement[]
currentRenderElementRenderElement | undefined
zIndexnumber
translateXnumber
translateYnumber
transformScaleXnumber
transformScaleYnumber
rotationRotation
transformOriginXTransformOrigin
transformOriginYTransformOrigin
parentEventBus<ContextEventMap> | undefined

Methods:

setCamera(eye: Vector3, target: Vector3, up: Vector3): void

Sets the view matrix from an eye position, look-at target, and up direction.

Parameters:

NameTypeDescription
eyeVector3
targetVector3
upVector3

setPerspective(fov: number, near: number, far: number): void

Updates the perspective projection with the given field of view, near, and far planes.

Parameters:

NameTypeDescription
fovnumber
nearnumber
farnumber

setOrthographic(left: number, right: number, bottom: number, top: number, near: number, far: number): void

Sets an orthographic projection with explicit frustum bounds.

Parameters:

NameTypeDescription
leftnumber
rightnumber
bottomnumber
topnumber
nearnumber
farnumber

getLightDirectionForRender(): Vector3

Returns the effective light direction for the current render, accounting for the light mode.

project(point: Vector3): ProjectedPoint

Projects a 3D world-space point to 2D screen coordinates.

Parameters:

NameTypeDescription
pointVector3

markRenderStart(): void

Signals the start of a render pass; resets the rendered-elements list at depth 0.

markRenderEnd(): void

Signals the end of a render pass.

save(): void

Pushes the current state onto the stack and resets to defaults.

restore(): void

Restores the most recently saved state from the stack.

clear(): void

Clears the entire rendering surface.

reset(): void

Resets the context to its initial state.

rotate(angle: number): void

Applies a rotation transformation.

Parameters:

NameTypeDescription
anglenumber

scale(x: number, y: number): void

Applies a scale transformation.

Parameters:

NameTypeDescription
xnumber
ynumber

translate(x: number, y: number): void

Applies a translation transformation.

Parameters:

NameTypeDescription
xnumber
ynumber

setTransform(a: number, b: number, c: number, d: number, e: number, f: number): void

Parameters:

NameTypeDescription
anumber
bnumber
cnumber
dnumber
enumber
fnumber

transform(a: number, b: number, c: number, d: number, e: number, f: number): void

Parameters:

NameTypeDescription
anumber
bnumber
cnumber
dnumber
enumber
fnumber

measureText(text: string, font: string \| undefined): TextMetrics

Measures text dimensions using the context's current font or an optional override.

Parameters:

NameTypeDescription
textstring
fontstring | undefined

createPath(id: string \| undefined): CanvasPath

Creates a new path element, optionally reusing an id for SVG diffing efficiency.

Parameters:

NameTypeDescription
idstring | undefined

applyClip(path: CanvasPath, fillRule: FillRule \| undefined): void

Clips subsequent drawing operations to the given path.

Parameters:

NameTypeDescription
pathCanvasPath
fillRuleFillRule | undefined

drawImage(image: CanvasImageSource, x: number, y: number, width: number \| undefined, height: number \| undefined): void

Draws an image onto the rendering surface at the given position and optional size.

Parameters:

NameTypeDescription
imageCanvasImageSource
xnumber
ynumber
widthnumber | undefined
heightnumber | undefined

applyFill(element: ContextText \| CanvasPath, fillRule: FillRule \| undefined): void

Fills the given path or text element using the current fill style.

Parameters:

NameTypeDescription
elementContextText | CanvasPath
fillRuleFillRule | undefined

applyStroke(element: ContextText \| CanvasPath): void

Strokes the given path or text element using the current stroke style.

Parameters:

NameTypeDescription
elementContextText | CanvasPath

isPointInPath(path: CanvasPath, x: number, y: number, fillRule: FillRule \| undefined): boolean

Tests whether a point is inside the filled region of a path.

Parameters:

NameTypeDescription
pathCanvasPath
xnumber
ynumber
fillRuleFillRule | undefined

isPointInStroke(path: CanvasPath, x: number, y: number): boolean

Tests whether a point is on the stroked outline of a path.

Parameters:

NameTypeDescription
pathCanvasPath
xnumber
ynumber

batch(body: () => TResult): TResult

Executes a callback within a save/restore pair, returning the callback's result.

Parameters:

NameTypeDescription
body() => TResult

invalidateTrackedElements(event: string): void

Clears the cached list of tracked elements for interaction, forcing a rebuild on the next hit test.

Parameters:

NameTypeDescription
eventstring

createText(options: TextOptions): ContextText

Creates a new text element from the given options.

Parameters:

NameTypeDescription
optionsTextOptions

enableInteraction(): void

Enables DOM interaction events (mouse enter, leave, move, click, drag) with element hit testing.

disableInteraction(): void

Disables DOM interaction events and clears the active element set.

destroy(): void

Destroys the context, removing the DOM element and disposing all resources.

has(type: keyof ContextEventMap): boolean

Returns whether there are any listeners registered for the given event type.

Parameters:

NameTypeDescription
typekeyof ContextEventMap

on(type: TEvent, handler: EventHandler<ContextEventMap[TEvent]>, options: EventSubscriptionOptions \| undefined): Disposable

Subscribes a handler to the given event type and returns a disposable for cleanup.

Parameters:

NameTypeDescription
typeTEvent
handlerEventHandler<ContextEventMap[TEvent]>
optionsEventSubscriptionOptions | undefined

off(type: TEvent, handler: EventHandler<ContextEventMap[TEvent]>): void

Removes a previously registered handler for the given event type.

Parameters:

NameTypeDescription
typeTEvent
handlerEventHandler<ContextEventMap[TEvent]>

once(type: TEvent, handler: EventHandler<ContextEventMap[TEvent]>, options: EventSubscriptionOptions \| undefined): Disposable

Subscribes a handler that is automatically removed after it fires once.

Parameters:

NameTypeDescription
typeTEvent
handlerEventHandler<ContextEventMap[TEvent]>
optionsEventSubscriptionOptions | undefined

emit(event: TEvent): TEvent

Emits an event, invoking all matching handlers and bubbling to the parent if applicable.

Parameters:

NameTypeDescription
eventTEvent

Context3DOptions interface

Options for the 3D rendering context, extending the base context options with camera parameters.

ts
interface Context3DOptions extends ContextOptions {
    fov?: number;
    near?: number;
    far?: number;
    lightDirection?: Vector3;
    lightMode?: LightMode;
}

Properties:

PropertyTypeDescription
fov?number | undefined
near?number | undefined
far?number | undefined
lightDirection?Vector3 | undefined
lightMode?LightMode | undefined
interactive?boolean | undefined
dragThreshold?number | undefined

LightMode type

Determines whether the light direction is fixed in world space or follows the camera.

ts
type LightMode = 'world' | 'camera';

createContext function

Creates a 3D rendering context attached to the given DOM target.

ts
function createContext(target: string | HTMLElement, options?: Context3DOptions): Context3D

Parameters:

NameTypeDescription
targetstring | HTMLElement
optionsContext3DOptions | undefined

Returns: Context3D