OrthographicCamera

← prev index next →

The flat, measured eye on the scene — a camera with no perspective, so an object keeps the same on-screen size however far away it is.

Remarks

This is the orthographic member of the AbstractCamera family: like every camera it projects the 3D scene to the 2D viewport, but with parallel projection instead of perspective. Nothing gets smaller with distance and parallel lines stay parallel — the look of technical drawings, isometric games, minimaps, and 2D/UI overlays, and the way to compare sizes without perspective foreshortening.

Key attributes. height is the only framing control you need: the vertical size of the viewing box in world units (the width follows from the viewport aspect). A smaller height zooms in; it is animatable. near and far bound the depth range and, unlike a perspective camera, may be zero or negative (there is no vanishing point to avoid). Aim it with the node transform, the same as any camera.

Related. Its sibling sk-perspective-camera is the realistic-optics camera (distant things shrink). To orbit, pan, and auto-fit rather than hand-place the view, drive it with a sk-camera-orbit-control.

Constructor

constructor(config?: { height?: number; near?: number; far?: number; aspect?: number; autoClipping?: boolean; autoClippingMargin?: number; minNear?: number; maxFar?: number; id?: string; x?: number; y?: number; z?: number; h?: number; p?: number; b?: number; quaternion?: Quaternion; sx?: number; sy?: number; sz?: number; s?: number; class?: string; style?: string })

Properties

Config Properties

PropertyTypeDefaultDescriptionDeclared by
heightanimatable number 200 Gets the vertical size of the viewing volume. OrthographicCamera
nearanimatable number 0 Gets the distance to the near clipping plane. AbstractCamera
faranimatable number 100.0 Gets the distance to the far clipping plane. AbstractCamera
aspectread-only number Gets the current aspect ratio. AbstractCamera
autoClipping boolean true Whether auto near/far clipping is enabled. AbstractCamera
autoClippingMargin number 0.1 Padding applied to the auto-computed depth range (fraction). AbstractCamera
minNear number Hard lower clamp on the auto-computed near plane. AbstractCamera
maxFar number 1e6 Hard upper clamp on the auto-computed far plane. AbstractCamera
idconfig-only string Unique identifier for the node, reflected to the host id attribute. SceneNodeConfig
xanimatable number 0 Gets the X position component. SceneNode
yanimatable number 0 Gets the Y position component. SceneNode
zanimatable number 0 Gets the Z position component. SceneNode
hanimatable number 0 Gets the heading (Y-axis) rotation in radians. SceneNode
panimatable number 0 Gets the pitch (X-axis) rotation in radians. SceneNode
banimatable number 0 Gets the bank (Z-axis) rotation in radians. SceneNode
quaternionanimatable Quaternion Gets the rotation as a quaternion. SceneNode
sxanimatable number 1 Gets the X-axis scale factor. SceneNode
syanimatable number 1 Gets the Y-axis scale factor. SceneNode
szanimatable number 1 Gets the Z-axis scale factor. SceneNode
sconfig-only number Uniform scale factor for all axes (overrides sx, sy, sz if provided) SceneNodeConfig
classconfig-only string Standard HTML class applied to the node host at construction SceneNodeConfig
styleconfig-only string Standard inline style applied to the node host at construction SceneNodeConfig

Other Properties

PropertyTypeDefaultDescriptionDeclared by
heightBasebase value number Gets the base (non-animated) value of height. OrthographicCamera
viewProjectionMatrixread-only Float32Array<ArrayBufferLike> Gets the combined view-projection matrix. AbstractCamera
viewMatrixread-only Float32Array<ArrayBufferLike> Gets the view matrix that transforms world space to camera space. AbstractCamera
hRad number 0 Gets the heading (Y-axis) rotation in radians. SceneNode
pRad number 0 Gets the pitch (X-axis) rotation in radians. SceneNode
bRad number 0 Gets the bank (Z-axis) rotation in radians. SceneNode
hDeg number 0 Gets the heading (Y-axis) rotation in degrees. SceneNode
pDeg number 0 Gets the pitch (X-axis) rotation in degrees. SceneNode
bDeg number 0 Gets the bank (Z-axis) rotation in degrees. SceneNode
xBasebase value number Gets the base (non-animated) value of X position. SceneNode
yBasebase value number Gets the base (non-animated) value of Y position. SceneNode
zBasebase value number Gets the base (non-animated) value of Z position. SceneNode
hBasebase value number 0 Gets the base (non-animated) value of heading (Y-axis rotation). SceneNode
pBasebase value number 0 Gets the base (non-animated) value of pitch (X-axis rotation). SceneNode
bBasebase value number 0 Gets the base (non-animated) value of bank (Z-axis rotation). SceneNode
quaternionBasebase value Quaternion Gets the base (non-animated) quaternion rotation. SceneNode
sxBasebase value number Gets the base (non-animated) value of X-axis scale. SceneNode
syBasebase value number Gets the base (non-animated) value of Y-axis scale. SceneNode
szBasebase value number Gets the base (non-animated) value of Z-axis scale. SceneNode
draggable boolean false Gets whether this node can be dragged. SceneNode
parentread-only SceneNode | null The parent node in the scene graph, or null at the root. SceneNode
sceneread-only any Gets the Scene this node belongs to, if any. SceneNode
posread-only Point3D Gets the world-space position of this node. SceneNode
matrixread-only Float32Array<ArrayBufferLike> Gets the computed 4x4 transformation matrix. SceneNode
animationsread-only SkenraAnimation[] Public getter for the animations affecting this target. SkenraAnimatable

Methods

MethodDescriptionDeclared by
getRayFromNDC(ndcX: number, ndcY: number): { origin: Float32Array; direction: Float32Array; } | null Creates a ray from the camera through a point in normalized device coordinates. AbstractCamera
worldPositionFromNDC(ndcX: number, ndcY: number, ndcZ: number = 0.5): [number, number, number] | null Computes a world-space position from Normalized Device Coordinates (NDC). AbstractCamera
worldPositionToNDC(worldX: number, worldY: number, worldZ: number): [number, number, number] | null Converts a world-space position to normalized device coordinates (NDC). AbstractCamera
getFrustumCornersWorldSpace(): { near: [number, number, number][]; far: [number, number, number][]; } Gets the 8 corners of the camera's view frustum in world space. AbstractCamera
getLookDirection(): [number, number, number] Gets the camera's look direction in world space. AbstractCamera
fitViewToBounds(bounds: SceneBounds, options?: FitViewOptions): void Adjusts camera to fit the given bounding box in view. AbstractCamera
fitViewToSphere(center: [number, number, number], radius: number, options?: FitViewOptions): void Adjusts camera to fit a bounding sphere in view. AbstractCamera
fitViewToScene(scene: Scene, options?: FitViewOptions): void Adjusts camera to fit all visible geometry in the scene. AbstractCamera
fitViewToNodes(nodes: SceneNode | SceneNode[], options?: FitViewOptions): void Adjusts camera to fit specific node(s) and their descendants. AbstractCamera
setViewOffset(fullWidth: number, fullHeight: number, x: number, y: number, width: number, height: number): void Sets a viewport offset for rendering a sub-region of the full viewport. AbstractCamera
clearViewOffset(): void Clears the viewport offset, restoring normal full-viewport rendering. AbstractCamera
addMaterialPaint(material: Material, paintTarget: PaintTarget, options?: any): Paint Applies a material to this node for a specific paint target. SceneNode
getPaints(): ReadonlyMap<PaintTarget, Paint> SceneNode
getOwnPaints(): readonly Paint[] Gets only the paints directly applied to this node (not inherited). SceneNode
removePaint(paint: Paint): void Removes a paint from this node. SceneNode
getWorldPosition(): number[] Returns this node’s origin in world space. SceneNode
getWorldMatrix(): Float32Array<ArrayBufferLike> Returns this node’s world transform — its local transform composed with all ancestor transforms. SceneNode
setViewportPosition(camera: AbstractCamera, x: number, y: number, z: number = 0.5): boolean Sets the node's local translation so that it appears at the specified viewport position. SceneNode
getViewportPosition(camera?: AbstractCamera): [number, number, number] | null Returns the node's current world position projected to viewport CSS pixel coordinates. SceneNode
setNDCPosition(camera: AbstractCamera, ndcX: number, ndcY: number, ndcZ: number = 0.5): boolean Sets the node's local translation so that it appears at the specified NDC position in the viewport. SceneNode
getBoundsInSpace(targetSpaceMatrix: Float32Array): { minX: number; maxX: number; minY: number; maxY: number; minZ: number; maxZ: number; } | null Computes the axis-aligned bounding box (AABB) of this node and its descendants SceneNode
animate(firstArg: TypedKeyframe<this>[] | TypedPropertyIndexedKeyframes<this> | Record<string, any> | globalThis.Keyframe[] | globalThis.PropertyIndexedKeyframes | null, secondArg?: number | KeyframeAnimationOptions | globalThis.KeyframeAnimationOptions): SkenraAnimation & Animation Creates a new SkenraAnimation for this target per Web Animations API. SkenraAnimatable
removeAnimation(animation: SkenraAnimation): boolean Removes a specific animation from this object. SkenraAnimatable
constrain(type: K, config: ConstraintConfigMap[K]): ConstraintReturnMap[K] Creates a constraint on this Animatable using a fluent API. SkenraAnimatable

Example

// Create camera with 200-unit tall view
const camera = new OrthographicCamera({ id: 'ortho-cam',
  height: 200,
  near: 0,
  far: 100
});

// Position for isometric view
camera.z = 50;
camera.rotateX(-Math.PI / 4);
camera.rotateY(Math.PI / 4);

// 2D top-down view
const topDown = new OrthographicCamera({ id: '2d',
  height: 100,
  near: -10,
  far: 10
});
topDown.rotateX(-Math.PI / 2);  // Look down at XZ plane