UNPKG

3d-scene-creator

Version:

A simple utility to create and manage 3D scenes

178 lines (165 loc) 5.39 kB
import * as THREE from 'three'; /** * Configuration options for initializing SceneCreator */ export interface SceneCreatorOptions { /** HTML container element to attach renderer to */ container?: HTMLElement; /** Scale factor for the scene (default: 1) */ scale?: number; /** Initial camera position (default: 10, 10, 10) */ camPos?: THREE.Vector3; /** Initial camera target position (default: 0, 0, 0) */ targetPos?: THREE.Vector3; } /** * A single directional light spec (color, intensity, position). */ export interface DirectionalLightSpec { color?: THREE.ColorRepresentation; intensity?: number; position?: THREE.Vector3; } /** * Options for {@link SceneCreator.addLighting}. */ export interface LightingOptions { /** Sky/ground ambient fill. Set to false to omit. */ hemisphere?: | false | { sky?: THREE.ColorRepresentation; ground?: THREE.ColorRepresentation; intensity?: number; }; /** Main directional light (casts shadows when `shadows` is on). */ key?: DirectionalLightSpec; /** Opposite-side fill light to soften shadows. Set to false to omit. */ fill?: false | DirectionalLightSpec; /** Enable shadow mapping on the renderer and the key light (default: true). */ shadows?: boolean; /** Half-size of the key light's orthographic shadow frustum (default: 16). */ shadowArea?: number; /** Shadow map resolution (default: 2048). */ shadowMapSize?: number; /** Apply ACES Filmic tone mapping (default: true). */ toneMapping?: boolean; /** Tone mapping exposure (default: 1.05). */ exposure?: number; } /** * Configuration overrides for OrbitControls */ export interface OrbitControlsConfig { enabled?: boolean; enableDamping?: boolean; dampingFactor?: number; maxPolarAngle?: number; maxDistance?: number; minDistance?: number; rotateSpeed?: number; enableZoom?: boolean; enablePan?: boolean; [key: string]: any; } /** * Animation configuration for model animations */ export interface AnimationConfig { /** Animation duration in seconds */ duration?: number; /** Easing function for animation */ easing?: string; /** Callback on animation completion */ onComplete?: () => void; } /** * Options for {@link SceneCreator.loadAnimatedModel}. */ export interface AnimatedModelOptions { /** Add the loaded model to the scene graph (default: true). */ add?: boolean; /** Flag every mesh as a shadow caster/receiver (default: true). */ shadows?: boolean; /** Name of the clip to start playing immediately (default: first clip). */ autoplay?: string | false; } /** * Options for {@link AnimatedModel.play}. */ export interface PlayAnimationOptions { /** Cross-fade duration from the current clip, in seconds (default: 0.3). */ fade?: number; /** Loop the clip (default: true). When false the clip plays once. */ loop?: boolean; /** Hold the final frame when a non-looping clip finishes (default: true). */ clampWhenFinished?: boolean; } /** * Handle returned by {@link SceneCreator.loadAnimatedModel} for controlling a * loaded, rigged glTF model and its animation clips. */ export interface AnimatedModel { /** The loaded model root (added to the scene unless `add: false`). */ model: THREE.Group; /** The model's animation clips, as parsed from the glTF. */ animations: THREE.AnimationClip[]; /** Names of every available clip. */ names: string[]; /** The AnimationMixer driving this model (already wired into the render loop). */ mixer: THREE.AnimationMixer; /** Ready-to-use actions, keyed by clip name. */ actions: Record<string, THREE.AnimationAction>; /** Cross-fade to a clip by name. Returns the action, or null if not found. */ play(name: string, options?: PlayAnimationOptions): THREE.AnimationAction | null; /** Fade the current clip out (default duration: 0.3s). */ stop(fade?: number): void; } /** * Options for {@link SceneCreator.enablePhysics}. */ export interface PhysicsOptions { /** World gravity, as a Vector3 or [x, y, z] (default: [0, -9.82, 0]). */ gravity?: THREE.Vector3 | [number, number, number]; /** Default bounciness for all contacts, 0 to 1 (default: 0.3). */ restitution?: number; /** Default friction for all contacts (default: 0.4). */ friction?: number; /** Let resting bodies fall asleep to save CPU (default: true). */ allowSleep?: boolean; } /** * Options for {@link SceneCreator.addBody}. */ export interface PhysicsBodyOptions { /** Body mass in kg. Use 0 for a static (immovable) body (default: 1). */ mass?: number; /** Collision shape derived from the mesh (default: "box"). */ shape?: "box" | "sphere"; /** Linear movement damping, 0 to 1 (default: 0.01). */ linearDamping?: number; /** Angular (spin) damping, 0 to 1 (default: 0.01). */ angularDamping?: number; } /** * Result from raycasting/picking an object */ export interface PickingResult { /** The intersected 3D object */ object: THREE.Object3D; /** Distance from camera to intersection point */ distance: number; /** Intersection point in 3D space */ point: THREE.Vector3; /** Normal vector at intersection point */ normal: THREE.Vector3; /** UV coordinates if available */ uv?: THREE.Vector2; } /** * Mouse position in normalized coordinates (-1 to 1) */ export interface MouseNormalized { x: number; y: number; }