UNPKG

@trickle/lec3d

Version:

easier three.js encapsulated by lec

136 lines (135 loc) 4.11 kB
import { CSS2DObject } from "three/examples/jsm/renderers/CSS2DRenderer.js"; import { Renderer, SceneItem } from "./../type"; import { Scene, Camera, Intersection, Object3D, Object3DEventMap } from "three"; import { CSS3DObject, CSS3DSprite } from "three/examples/jsm/renderers/CSS3DRenderer"; import { TextGeometry } from "three/examples/jsm/geometries/TextGeometry"; import { OrbitControls } from "three/examples/jsm/controls/OrbitControls"; export interface InitSceneParams { /** 辅助坐标轴 */ axesHelperConfigs?: { enable: boolean; size: number; }; } export interface InitSceneReturns { renderer: THREE.WebGLRenderer; camera: THREE.PerspectiveCamera; scene: THREE.Scene; } export interface AddControlsParams { callback?: (scene: Scene, camera: Camera) => void; } export interface CreateControlsParams { scene: Scene; camera: Camera; element: HTMLElement; callback: Function; } export interface SceneAddParams { scene: Scene; content: Array<SceneItem> | SceneItem; } export interface CreateAxesHelperParams { length?: number; } export interface CreateLightParams { color?: number | string; colorOpacity?: number; ambientLightColor?: number | string; ambientLightColorOpacity?: number; directLightColor?: number | string; directLightColorOpacity?: number; } export interface CreateCameraParams { width?: number; height?: number; position?: { x: number; y: number; z: number; }; lookAt?: { x: number; y: number; z: number; }; } export interface CreateRendererParams { width?: number; height?: number; backgroundColor?: number | string; backgroundColorOpacity?: number; } export type InitParams = { lightConfigs?: CreateLightParams; cameraConfigs?: CreateCameraParams; axesHelperConfigs?: CreateAxesHelperParams; rendererConfigs?: CreateRendererParams; } | null; export type InitReturns = { renderer: Renderer; camera: Camera; scene: Scene; mountTo: (el: HTMLElement) => void; refresh: () => void; addControls: (params?: AddControlsParams) => OrbitControls; getClickEventTargets: (e: MouseEvent) => Intersection<Object3D<Object3DEventMap>>[]; clear: () => void; unload: () => void; }; export interface CreateCss3dRendererParams { scene: Scene; camera: Camera; } export interface CreateCss3dObjectParams { element: HTMLElement; } export interface CreatePlaneParams extends CreateCss3dObjectParams { angle: string | number; } export interface InitCss3dParams { scene: Scene; camera: Camera; } export type InitCss3dReturns = { refresh: () => void; mountTo: (element: HTMLElement) => void; createCss3dObject: ({ element }: CreateCss3dObjectParams) => CSS3DObject; createCss3dSprite: ({ element }: CreateCss3dObjectParams) => CSS3DSprite; createText: ({ text, options, }: CreateTextParams) => THREE.Mesh<TextGeometry, THREE.MeshBasicMaterial, THREE.Object3DEventMap>; }; export interface CreateCanvasPlaneParams { element: HTMLElement; callback: (plane: THREE.Mesh<THREE.PlaneGeometry, THREE.MeshBasicMaterial, THREE.Object3DEventMap>) => void; } export interface CreateTextParams { text: string; options?: { color?: number | string; fontSize?: number; fontFamilyFile?: string; thickness?: number; position?: { x: number; y: number; z: number; }; rotation?: { x?: number | string; y?: number | string; z?: number | string; }; }; } export type InitCss2dParams = InitCss3dParams; export type InitCss2dReturns = { refresh: () => void; mountTo: (element: HTMLElement) => void; createCss2dObject: (params: CreateCss2dObjectParams) => CSS2DObject; }; export type CreateCss2dRendererParams = CreateCss3dRendererParams; export interface CreateCss2dObjectParams { content: string | HTMLElement; style?: Record<string, string | number>; occludable?: boolean; }