three-base 1.129.0 → 1.129.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/index.js +34 -0
  2. package/index.ts +5 -1
  3. package/lib/{ApngTexture.ts → ApngTexture.js} +11 -41
  4. package/lib/{ApngTextureManage.ts → ApngTextureManage.js} +13 -56
  5. package/lib/EventMesh.js +59 -0
  6. package/lib/{ExtrudeMesh.ts → ExtrudeMesh.js} +77 -284
  7. package/lib/{FPScontrol.ts → FPScontrol.js} +25 -64
  8. package/lib/InstancedGroupMesh.js +63 -0
  9. package/lib/{KeyFrameAnimation.ts → KeyFrameAnimation.js} +19 -63
  10. package/lib/{PlaneText.ts → PlaneText.js} +5 -34
  11. package/lib/{PointLight.ts → PointLight.js} +4 -18
  12. package/lib/Sky/{Sky.ts → Sky.js} +4 -12
  13. package/lib/Text3D/Text3D.js +60 -0
  14. package/lib/Text3D/fontController.js +200 -0
  15. package/lib/Text3D/gentilis.json +811 -0
  16. package/lib/{ThreeBase.ts → ThreeBase.js} +75 -131
  17. package/lib/{ThreeMouse.ts → ThreeMouse.js} +61 -168
  18. package/lib/{Transition.ts → Transition.js} +30 -101
  19. package/lib/index.d.ts +22 -0
  20. package/lib/{keyContorls.ts → keyContorls.js} +11 -40
  21. package/lib/lib/ApngTexture.d.ts +13 -0
  22. package/lib/lib/ApngTextureManage.d.ts +18 -0
  23. package/lib/lib/EventMesh.d.ts +18 -0
  24. package/lib/lib/ExtrudeMesh.d.ts +111 -0
  25. package/lib/lib/FPScontrol.d.ts +44 -0
  26. package/lib/lib/InstancedGroupMesh.d.ts +10 -0
  27. package/lib/lib/KeyFrameAnimation.d.ts +25 -0
  28. package/lib/lib/PlaneText.d.ts +37 -0
  29. package/lib/lib/PointLight.d.ts +13 -0
  30. package/lib/lib/Sky/Sky.d.ts +13 -0
  31. package/lib/lib/Text3D/Text3D.d.ts +20 -0
  32. package/lib/lib/Text3D/fontController.d.ts +59 -0
  33. package/lib/lib/ThreeBase.d.ts +59 -0
  34. package/lib/lib/ThreeMouse.d.ts +39 -0
  35. package/lib/lib/Transition.d.ts +45 -0
  36. package/lib/lib/keyContorls.d.ts +25 -0
  37. package/lib/lib/planeModal1/PlaneModal1.d.ts +32 -0
  38. package/lib/lib/shaders.d.ts +17 -0
  39. package/lib/lib/spriteModal1/SpriteModal1.d.ts +31 -0
  40. package/lib/lib/threeLoader.d.ts +20 -0
  41. package/lib/lib/threeUtils.d.ts +41 -0
  42. package/lib/lib/type.d.ts +0 -0
  43. package/lib/planeModal1/{PlaneModal1.ts → PlaneModal1.js} +33 -77
  44. package/lib/{shaders.ts → shaders.js} +19 -38
  45. package/lib/spriteModal1/{SpriteModal1.ts → SpriteModal1.js} +33 -80
  46. package/lib/{threeLoader.ts → threeLoader.js} +19 -45
  47. package/lib/{threeUtils.ts → threeUtils.js} +81 -82
  48. package/lib/{type.ts → type.js} +1 -4
  49. package/package.json +7 -6
  50. package/lib/EventMesh.ts +0 -79
  51. package/lib/InstancedGroupMesh.ts +0 -80
  52. package/lib/text/Text2D.ts +0 -41
  53. package/lib/text/Text3D.ts +0 -20
@@ -0,0 +1,37 @@
1
+ import { Mesh, MeshBasicMaterial, PlaneGeometry, Vector3 } from "three";
2
+ import SpriteText from "three-spritetext";
3
+ type Props = {
4
+ text?: string;
5
+ textHeight?: number;
6
+ color?: string;
7
+ backgroundColor?: string;
8
+ fontFace?: string;
9
+ fontSize?: number;
10
+ fontWeight?: string;
11
+ padding?: number | [number, number];
12
+ borderWidth?: number;
13
+ borderRadius?: number;
14
+ borderColor?: string;
15
+ strokeWidth?: number;
16
+ strokeColor?: string;
17
+ };
18
+ export default class PlaneText extends Mesh {
19
+ constructor(text?: string);
20
+ type: string;
21
+ static geometry: PlaneGeometry;
22
+ spriteText: SpriteText;
23
+ material: MeshBasicMaterial;
24
+ set(parame: Props): void;
25
+ get(prop: keyof SpriteText): string | number | boolean | import("three").BufferGeometry | import("three").Matrix3 | import("three").Matrix4 | import("three").Material | import("three").Object3D | {
26
+ [key: string]: any;
27
+ } | ((renderer: import("three").WebGLRenderer, scene: import("three").Scene, camera: import("three").Camera, geometry: import("three").BufferGeometry, material: import("three").Material, group: import("three").Group) => void) | ((renderer: import("three").WebGLRenderer, scene: import("three").Scene, camera: import("three").Camera, geometry: import("three").BufferGeometry, material: import("three").Material, group: import("three").Group) => void) | import("three").Quaternion | Vector3 | ((vector: number | Vector3, y?: number, z?: number) => void) | import("three").Object3D[] | ((id: number) => import("three").Object3D) | ((name: string) => import("three").Object3D) | ((name: string, value: string) => import("three").Object3D) | ((callback: (object: import("three").Object3D) => any) => void) | ((callback: (object: import("three").Object3D) => any) => void) | ((callback: (object: import("three").Object3D) => any) => void) | ((meta?: {
28
+ geometries: any;
29
+ materials: any;
30
+ textures: any;
31
+ images: any;
32
+ }) => any) | ((type: string, listener: (event: import("three").Event) => void) => void) | ((type: string, listener: (event: import("three").Event) => void) => boolean) | ((type: string, listener: (event: import("three").Event) => void) => void) | ((event: {
33
+ [attachment: string]: any;
34
+ type: string;
35
+ }) => void) | import("three").Vector2 | ((force?: boolean) => void) | import("three").Euler | (() => void) | import("three").Layers | import("three").AnimationClip[] | import("three").SpriteMaterial | ((quaternion: import("three").Quaternion) => SpriteText) | ((axis: Vector3, angle: number) => SpriteText) | ((axis: Vector3, angle: number) => SpriteText) | ((angle: number) => SpriteText) | ((angle: number) => SpriteText) | ((angle: number) => SpriteText) | ((axis: Vector3, distance: number) => SpriteText) | ((distance: number) => SpriteText) | ((distance: number) => SpriteText) | ((distance: number) => SpriteText) | ((...object: import("three").Object3D[]) => SpriteText) | ((...object: import("three").Object3D[]) => SpriteText) | (() => SpriteText) | (() => SpriteText) | ((object: import("three").Object3D) => SpriteText) | ((raycaster: import("three").Raycaster, intersects: import("three").Intersection[]) => void) | ((recursive?: boolean) => SpriteText) | ((source: SpriteText) => SpriteText) | ((matrix: import("three").Matrix4) => void) | ((axis: Vector3, angle: number) => void) | ((euler: import("three").Euler) => void) | ((m: import("three").Matrix4) => void) | ((q: import("three").Quaternion) => void) | ((vector: Vector3) => Vector3) | ((vector: Vector3) => Vector3) | ((target: Vector3) => Vector3) | ((target: import("three").Quaternion) => import("three").Quaternion) | ((target: Vector3) => Vector3) | ((target: Vector3) => Vector3) | ((updateParents: boolean, updateChildren: boolean) => void);
36
+ }
37
+ export {};
@@ -0,0 +1,13 @@
1
+ import { PointLight as THREEPointLight } from "three";
2
+ import threeSpritetext from "three-spritetext";
3
+ /**
4
+ * 点光源
5
+ * @export
6
+ * @class PointLight
7
+ * @extends {THREEPointLight}
8
+ */
9
+ export default class PointLight extends THREEPointLight {
10
+ constructor(color?: string, intensity?: number, distance?: number, decay?: number);
11
+ sphere: void;
12
+ label: threeSpritetext;
13
+ }
@@ -0,0 +1,13 @@
1
+ import { Mesh, MeshBasicMaterial, SphereGeometry } from "three";
2
+ /**
3
+ * 天空球
4
+ */
5
+ export default class Sky extends Mesh {
6
+ constructor();
7
+ static geometry: SphereGeometry;
8
+ material: MeshBasicMaterial;
9
+ /**
10
+ *设置贴图
11
+ */
12
+ setMap(src: string): void;
13
+ }
@@ -0,0 +1,20 @@
1
+ import { Mesh, MeshStandardMaterial } from "three";
2
+ export type Text3DProps = {
3
+ text?: string;
4
+ fontType?: string;
5
+ size?: number | undefined;
6
+ height?: number | undefined;
7
+ curveSegments?: number | undefined;
8
+ bevelEnabled?: boolean | undefined;
9
+ bevelThickness?: number | undefined;
10
+ bevelSize?: number | undefined;
11
+ bevelOffset?: number | undefined;
12
+ bevelSegments?: number | undefined;
13
+ };
14
+ export default class Text3D extends Mesh {
15
+ constructor(text?: string);
16
+ static path: string;
17
+ material: MeshStandardMaterial;
18
+ _config: Text3DProps;
19
+ setText(text3DProps: Text3DProps): void;
20
+ }
@@ -0,0 +1,59 @@
1
+ import Dexie, { Table } from "dexie";
2
+ import { Font } from "three";
3
+ export type saveFontParam = {
4
+ fontType?: string;
5
+ fontName: string;
6
+ fontJson: any;
7
+ };
8
+ export type addFontFamilyParam = {
9
+ fontType?: string;
10
+ fontFamilyJson: any;
11
+ };
12
+ export type getFontParam = {
13
+ fontType?: string;
14
+ fontName: string;
15
+ };
16
+ export type loadTextParam = {
17
+ fontBasePath: string;
18
+ fontType?: string;
19
+ text?: string;
20
+ callback?: (font: Font) => void;
21
+ };
22
+ declare class indexBD extends Dexie {
23
+ constructor(dbName: string);
24
+ threeFont: Table;
25
+ }
26
+ declare class fontContorl {
27
+ constructor();
28
+ THREEFontMap: Map<string, Font>;
29
+ fontBD: indexBD;
30
+ /**
31
+ * 保存 字体json到本地数据库中
32
+ * @param {saveFontParam} { fontType = "simhei", fontName, fontJson }
33
+ * @memberof fontContorl
34
+ */
35
+ saveFont({ fontType, fontName, fontJson }: saveFontParam): Promise<void>;
36
+ /**
37
+ * 通过 fontType 和 fontName 查询 fontJson
38
+ * @param {getFontParam} { fontType = "simhei", fontName }
39
+ * @returns
40
+ * @memberof fontContorl
41
+ */
42
+ getFont({ fontType, fontName }: getFontParam): Promise<any>;
43
+ _loadTextCall: Map<string, Array<() => void>>;
44
+ loadText({ fontType, text, fontBasePath, callback }: loadTextParam): Promise<void>;
45
+ _loadFontIndexJson({ fontType, fontBasePath }: loadTextParam): Promise<void>;
46
+ _loadFontJson({ fontType, fontName, fontBasePath }: {
47
+ fontType: string;
48
+ fontName: string;
49
+ fontBasePath: string;
50
+ }): Promise<void>;
51
+ hasFont({ fontType, fontName }: {
52
+ fontType: string;
53
+ fontName: string;
54
+ }): boolean;
55
+ addFont({ fontType, fontName, fontJson }: saveFontParam): void;
56
+ addFontFamily({ fontType, fontFamilyJson }: addFontFamilyParam): void;
57
+ }
58
+ declare const fontContorller: fontContorl;
59
+ export default fontContorller;
@@ -0,0 +1,59 @@
1
+ import { BufferGeometry, EventDispatcher, Object3D, PerspectiveCamera, Scene, Texture, Vector2, Vector3, WebGLRenderer, WebGLRenderTarget } from "three";
2
+ import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";
3
+ import ThreeMouse from "./ThreeMouse";
4
+ import Transition from "./Transition";
5
+ export default class ThreeBase extends EventDispatcher {
6
+ constructor();
7
+ renderTarget: WebGLRenderTarget;
8
+ renderTarget2: WebGLRenderTarget;
9
+ tempVector2: Vector2;
10
+ tempVector3: Vector3;
11
+ size: Vector2;
12
+ renderer: WebGLRenderer;
13
+ camera: PerspectiveCamera;
14
+ scene: Scene;
15
+ threeMouse: ThreeMouse;
16
+ controls: OrbitControls;
17
+ isRendererContextLost: boolean;
18
+ setContainer(div: HTMLDivElement | null): Promise<void>;
19
+ resize(width: number, height: number): void;
20
+ controlsPosition: Transition;
21
+ controlsCenter: Transition;
22
+ init(): void;
23
+ resetLookAt({ position, center, }: {
24
+ position?: Vector3;
25
+ center?: Vector3;
26
+ }): void;
27
+ setLookAt({ position, center, duration }: {
28
+ position?: Vector3;
29
+ center?: Vector3;
30
+ duration?: number;
31
+ }): Promise<void>;
32
+ getLookAt(): {
33
+ center: Vector3;
34
+ position: Vector3;
35
+ centerPosition: string;
36
+ };
37
+ v3tov2(v3: Vector3): Vector2;
38
+ controlType: "OrbitControls" | "MapControls";
39
+ originScreenSpacePanning: boolean;
40
+ setControlType(controlType: "OrbitControls" | "MapControls"): void;
41
+ autoRender: boolean;
42
+ needRender: boolean;
43
+ stopRender(): void;
44
+ render(): void;
45
+ renderBindThis: any;
46
+ download(fileName?: string): void;
47
+ private _preMesh;
48
+ private _preRT;
49
+ preloadTexture(src: string): Promise<void>;
50
+ preloadGeometry(geometry: BufferGeometry): Promise<void>;
51
+ clearRendererTargte(rendererTarget: WebGLRenderTarget | null): void;
52
+ copyTextureToRenderTarget(texture: Texture, rendererTarget: WebGLRenderTarget | null, alpha?: boolean, opactity?: number): void;
53
+ object3dToRendererTarget(obj: Object3D, rendererTarget: WebGLRenderTarget): void;
54
+ rendererTagetAddStroke(rendererTarget: WebGLRenderTarget, strockWidth: number, color: string, opacity: number): void;
55
+ renderObject3dStroke(obj: Object3D, strockWidth: number, color: string, opacity: number): void;
56
+ renderTargetgaussBlur(rendererTarget: WebGLRenderTarget, radius: number, opacity: number): void;
57
+ renderTargetAddGlow(renderTarget: WebGLRenderTarget, width: number, color: string): void;
58
+ renderRendererTarget(renderTarget: WebGLRenderTarget, alpha?: boolean): void;
59
+ }
@@ -0,0 +1,39 @@
1
+ import * as THREE from "three";
2
+ import { Object3D, Scene } from "three";
3
+ import type { Intersection } from "three";
4
+ export interface ThreeMouseEvent extends Intersection {
5
+ renderer: THREE.Renderer;
6
+ camera: THREE.Camera;
7
+ type: string;
8
+ offsetX: number;
9
+ offsetY: number;
10
+ x: number;
11
+ y: number;
12
+ }
13
+ /**
14
+ * harp.gl 专用的鼠标拾取模型对象
15
+ */
16
+ export default class ThreeMouse {
17
+ constructor(renderer: THREE.WebGLRenderer, camera: THREE.Camera, scene: THREE.Scene);
18
+ _renderer: THREE.WebGLRenderer;
19
+ _camera: THREE.Camera;
20
+ _scene: Scene;
21
+ _mosePosition: THREE.Vector2;
22
+ _mouseDownPosition: THREE.Vector2;
23
+ _mesh_on?: Object3D;
24
+ _mesh_Down?: Object3D;
25
+ _raycaster: THREE.Raycaster;
26
+ _frame: number;
27
+ _mouseInRenderer: boolean;
28
+ _mousemoveEvent?: MouseEvent;
29
+ _object3ds: Object3D[];
30
+ _click_num: number;
31
+ _getSelected(object3ds: Object3D[]): Intersection | undefined;
32
+ hasEvent(object?: Object3D, types?: Array<"leftclick" | "rightclick" | "click" | "dbclick" | "mouseenter" | "mouseleave" | "mousemove" | "mousedown" | "mouseup">): boolean;
33
+ hasCursor(object?: Object3D): boolean;
34
+ dispatchEvent(): void;
35
+ _mouseleave: (e: MouseEvent) => void;
36
+ _mousemove: (e: MouseEvent) => void;
37
+ _mousedown: (e: MouseEvent) => void;
38
+ _mouseup: import("lodash").DebouncedFunc<(e: PointerEvent) => Promise<void>>;
39
+ }
@@ -0,0 +1,45 @@
1
+ interface TParam {
2
+ [key: string]: number;
3
+ }
4
+ export default class Transition {
5
+ /**
6
+ *Creates an instance of transition.
7
+ * @param {{ [key: string]: number }} // 初始值
8
+ * @param {[0.8, 0, 0.2, 1]} // 贝塞尔曲线
9
+ * @param {number} [duration=1000] // 过渡时间
10
+ * @memberof transition
11
+ */
12
+ constructor(param?: TParam, bezier?: [number, number, number, number], duration?: number);
13
+ _keys: Array<string>;
14
+ _bezier: [number, number, number, number];
15
+ _Xbezier: [number, number, number, number];
16
+ _Ybezier: [number, number, number, number];
17
+ setBezier(bezier?: [number, number, number, number]): this;
18
+ timeTemp: number;
19
+ _duration: number;
20
+ _delay: number;
21
+ setDuration(duration?: number): this;
22
+ setDelay(delay?: number): this;
23
+ _: {
24
+ [key: string]: number;
25
+ };
26
+ onChangeCall?: (josn: {
27
+ [key: string]: number;
28
+ }) => void;
29
+ run({ timeTemp }: any): this;
30
+ runbindThis: any;
31
+ onChange(onChangeCall: (josn: {
32
+ [key: string]: number;
33
+ }) => void): this;
34
+ get(key: string | number): number;
35
+ set(param: TParam): Promise<this>;
36
+ reset(param: TParam): this;
37
+ getKeys(): string[];
38
+ hasKey(key: string): boolean;
39
+ getJson(): {
40
+ [key: string]: number;
41
+ };
42
+ _isDone: boolean;
43
+ isDone(): boolean;
44
+ }
45
+ export {};
@@ -0,0 +1,25 @@
1
+ import { Event, EventDispatcher, Vector3 } from "three";
2
+ /**
3
+ * 键盘 使用 ↑↓←→ 控制 x z 方向, 小键盘 1 0 控制 y 方向
4
+ *
5
+ * @class KeyContorls
6
+ * @extends {EventDispatcher}
7
+ */
8
+ declare class KeyContorls extends EventDispatcher {
9
+ constructor();
10
+ uuid: string;
11
+ direction: Vector3;
12
+ add(e: any): void;
13
+ delete(e: any): void;
14
+ enter(e: any): void;
15
+ keyDown: (e: any) => void;
16
+ _listeners?: {
17
+ [key: string]: Array<any>;
18
+ };
19
+ removeEvent: import("lodash").DebouncedFunc<(type: string) => void>;
20
+ addEventListener(type: string, listener: (event: Event) => void): void;
21
+ addEvent(): void;
22
+ dispose(): void;
23
+ }
24
+ declare const keyContorls: KeyContorls;
25
+ export default keyContorls;
@@ -0,0 +1,32 @@
1
+ import { MeshBasicMaterial, Mesh, CanvasTexture, PlaneGeometry } from "three";
2
+ export type PlaneModal1Config = {
3
+ size?: number;
4
+ title?: string;
5
+ titleColor?: string;
6
+ texts?: Array<{
7
+ text?: string;
8
+ color?: string;
9
+ size?: number;
10
+ }>;
11
+ };
12
+ export default class PlaneModal1 extends Mesh {
13
+ constructor(config?: PlaneModal1Config);
14
+ renderOrder: number;
15
+ geometry: PlaneGeometry;
16
+ material: MeshBasicMaterial;
17
+ static img: HTMLImageElement;
18
+ canvas: HTMLCanvasElement;
19
+ context: CanvasRenderingContext2D;
20
+ texture: CanvasTexture;
21
+ _config: {
22
+ size: number;
23
+ title: string;
24
+ titleColor: string;
25
+ texts: Array<{
26
+ text: string;
27
+ color: string;
28
+ size: number;
29
+ }>;
30
+ };
31
+ updata(config: PlaneModal1Config): Promise<void>;
32
+ }
@@ -0,0 +1,17 @@
1
+ import { Mesh, OrthographicCamera, ShaderMaterial, WebGLRenderer } from "three";
2
+ declare class FullScreenQuad {
3
+ constructor();
4
+ _mesh: Mesh;
5
+ dispose(): void;
6
+ render(renderer: WebGLRenderer): void;
7
+ get material(): import("three").Material | import("three").Material[];
8
+ set material(value: import("three").Material | import("three").Material[]);
9
+ }
10
+ export declare const fullScreenMesh: FullScreenQuad;
11
+ export declare const orthographicCamera: OrthographicCamera;
12
+ export declare const clearShader: ShaderMaterial;
13
+ export declare const intersectionShader: ShaderMaterial;
14
+ export declare const coptyShader: ShaderMaterial;
15
+ export declare const strokeShader: ShaderMaterial;
16
+ export declare const gaussBlurShader: ShaderMaterial;
17
+ export {};
@@ -0,0 +1,31 @@
1
+ import { Sprite, CanvasTexture, Raycaster, Intersection } from "three";
2
+ export type SpritModal1Config = {
3
+ size?: number;
4
+ title?: string;
5
+ titleColor?: string;
6
+ texts?: Array<{
7
+ text?: string;
8
+ color?: string;
9
+ size?: number;
10
+ }>;
11
+ };
12
+ export default class SpritModal1 extends Sprite {
13
+ constructor(config?: SpritModal1Config);
14
+ renderOrder: number;
15
+ static img: HTMLImageElement;
16
+ canvas: HTMLCanvasElement;
17
+ context: CanvasRenderingContext2D;
18
+ texture: CanvasTexture;
19
+ _config: {
20
+ size: number;
21
+ title: string;
22
+ titleColor: string;
23
+ texts: Array<{
24
+ text: string;
25
+ color: string;
26
+ size: number;
27
+ }>;
28
+ };
29
+ updata(config: SpritModal1Config): Promise<void>;
30
+ raycast(raycaster: Raycaster, intersects: Intersection[]): void;
31
+ }
@@ -0,0 +1,20 @@
1
+ import { EventDispatcher, Texture, TextureLoader } from "three";
2
+ import { FBXLoader } from "three/examples/jsm/loaders/FBXLoader";
3
+ import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader";
4
+ import { MTLLoader } from "three/examples/jsm/loaders/MTLLoader";
5
+ import { OBJLoader } from "three/examples/jsm/loaders/OBJLoader";
6
+ declare class ThreeLoader extends EventDispatcher {
7
+ constructor();
8
+ anisotropy: number;
9
+ setAnisotropy(v: number): void;
10
+ textureMap: Map<string, Texture>;
11
+ textureLoader: TextureLoader;
12
+ getTexture(src: string): Texture;
13
+ fbxLoader: FBXLoader;
14
+ objLoader: OBJLoader;
15
+ mtlLoader: MTLLoader;
16
+ gltfLoader: GLTFLoader;
17
+ onload: boolean;
18
+ }
19
+ declare const threeLoader: ThreeLoader;
20
+ export default threeLoader;
@@ -0,0 +1,41 @@
1
+ import { Box3, BufferGeometry, Clock, EventDispatcher, Object3D, Vector3 } from "three";
2
+ declare class ThreeUtils extends EventDispatcher {
3
+ constructor();
4
+ isProd: boolean;
5
+ isDev: boolean;
6
+ _timeTemp: number;
7
+ _accumulate: number;
8
+ _box3: Box3;
9
+ _size: Vector3;
10
+ _center: Vector3;
11
+ _clock: Clock;
12
+ requestAnimationFrame(): void;
13
+ private _keepZoomDoms;
14
+ /**
15
+ *计算需要保持比例的元素
16
+ */
17
+ private _computerDomZoom;
18
+ /**
19
+ * dom元素保持比例
20
+ */
21
+ keepZoom(dom: HTMLElement | null, width?: number, height?: number): void;
22
+ workList: Array<() => void>;
23
+ clock: Clock;
24
+ /**
25
+ * @param {() => void} [callback]
26
+ * @param {boolean} [first=true] 需要优先执行
27
+ */
28
+ addWork(work?: () => void, first?: boolean): void;
29
+ /**
30
+ *判断一个元素是否在页面上
31
+ */
32
+ inDocument(dom: ParentNode | null): boolean;
33
+ getCenter(object3d: Object3D | BufferGeometry): Vector3;
34
+ getSize(object3d: Object3D | BufferGeometry): Vector3;
35
+ alignBottom(object3d: Object3D | BufferGeometry, y?: number): void;
36
+ centerObject3D(object3d: Object3D | BufferGeometry): void;
37
+ center(object3d: Object3D | BufferGeometry): void;
38
+ scaleTo(object3d: Object3D | BufferGeometry, size?: number): void;
39
+ }
40
+ declare const threeUtils: ThreeUtils;
41
+ export default threeUtils;
File without changes
@@ -1,129 +1,89 @@
1
1
  /*
2
- * @Author: xiaosihan
3
- * @Date: 2023-03-09 18:51:11
2
+ * @Author: xiaosihan
3
+ * @Date: 2023-03-09 18:51:11
4
4
  * @Last Modified by: xiaosihan
5
5
  * @Last Modified time: 2023-03-09 19:15:35
6
6
  */
7
-
8
- import { MeshBasicMaterial, Mesh, DoubleSide, CanvasTexture, Vector2, BufferGeometry, PlaneGeometry } from "three";
7
+ import { MeshBasicMaterial, Mesh, DoubleSide, CanvasTexture, Vector2, PlaneGeometry } from "three";
9
8
  import planeModalPNG from "./planeModal.png";
10
-
11
-
12
- export type PlaneModal1Config = {
13
- size?: number,
14
- title?: string,
15
- titleColor?: string,
16
- texts?: Array<{
17
- text?: string,
18
- color?: string,
19
- size?: number
20
- }>
21
- }
22
-
23
9
  // 平面模型弹窗
24
10
  export default class PlaneModal1 extends Mesh {
25
-
26
- constructor(config: PlaneModal1Config = {}) {
11
+ constructor(config = {}) {
27
12
  super();
28
13
  this.updata(config);
29
14
  this.material.map = this.texture;
30
15
  this.scale.set(10, 10, 10);
31
16
  }
32
-
17
+ renderOrder = 99;
33
18
  geometry = new PlaneGeometry(1 * 0.65, 0.728 * 0.65, 1, 1);
34
-
35
19
  material = new MeshBasicMaterial({
36
20
  side: DoubleSide,
37
- transparent: true
21
+ transparent: true,
22
+ alphaTest: 0.01
38
23
  });
39
-
40
24
  // 背景图
41
25
  static img = (() => {
42
26
  const img = new Image();
43
27
  img.src = planeModalPNG;
44
28
  return img;
45
29
  })();
46
-
47
30
  canvas = (() => {
48
31
  const canvas = document.createElement("canvas");
49
32
  canvas.width = 660;
50
33
  canvas.height = 481;
51
34
  return canvas;
52
35
  })();
53
-
54
- context = this.canvas.getContext("2d")!;
55
-
36
+ context = this.canvas.getContext("2d");
56
37
  texture = new CanvasTexture(this.canvas);
57
-
58
38
  // 配置
59
- _config: {
60
- size: number,
61
- title: string,
62
- titleColor: string,
63
- texts: Array<{
64
- text: string,
65
- color: string,
66
- size: number
67
- }>
68
- } = {
69
- size: 10,
70
- title: "PlaneModal1",
71
- titleColor: "#ffffff",
72
- texts: []
73
- // [
74
- // {
75
- // text: "1",
76
- // color: "#ffff00",
77
- // size: 40
78
- // },
79
- // {
80
- // text: "2",
81
- // color: "#ff00ff",
82
- // size: 40
83
- // },
84
- // ]
85
- }
86
-
87
- async updata(config: PlaneModal1Config) {
88
-
89
- Object.assign(this._config, config)
90
-
39
+ _config = {
40
+ size: 10,
41
+ title: "PlaneModal1",
42
+ titleColor: "#ffffff",
43
+ texts: []
44
+ // [
45
+ // {
46
+ // text: "1",
47
+ // color: "#ffff00",
48
+ // size: 40
49
+ // },
50
+ // {
51
+ // text: "2",
52
+ // color: "#ff00ff",
53
+ // size: 40
54
+ // },
55
+ // ]
56
+ };
57
+ async updata(config) {
58
+ Object.assign(this._config, config);
91
59
  //绘制背景
92
60
  this.context.clearRect(0, 0, 660, 481);
93
-
94
61
  while (!PlaneModal1.img.complete) {
95
62
  await new Promise(resolve => setTimeout(resolve, 100));
96
63
  }
97
-
98
64
  // 设置大小
99
65
  this.scale.set(this._config.size, this._config.size, this._config.size);
100
-
101
66
  // this.context.fillStyle = "#00000088";
102
67
  // this.context.fillRect(0, 0, 660, 481);
103
-
104
68
  //绘制背景
105
69
  this.context.drawImage(PlaneModal1.img, 0, 0);
106
-
107
70
  // 绘制标题
108
71
  this.context.fillStyle = this._config.titleColor;
109
- this.context.font = '40px serif';// 设置字体大小
72
+ this.context.font = '40px serif'; // 设置字体大小
110
73
  this.context.textAlign = "left";
111
74
  this.context.textBaseline = "top";
112
75
  this.context.fillText(this._config.title, 60, 72);
113
-
114
76
  let textPos = new Vector2(60, 150);
115
77
  let maxWidth = 530;
116
78
  // 绘制内容
117
79
  this._config.texts.map(({ text = "text", color = "#ffffff", size = 40 }) => {
118
80
  this.context.fillStyle = color;
119
- this.context.font = `${size}px serif`;// 设置字体大小
81
+ this.context.font = `${size}px serif`; // 设置字体大小
120
82
  this.context.textAlign = "left";
121
83
  this.context.textBaseline = "top";
122
-
123
84
  // 字符分隔为数组
124
85
  var arrText = text.split('');
125
86
  var line = '';
126
-
127
87
  for (var n = 0; n < arrText.length; n++) {
128
88
  var metrics = this.context.measureText(line + arrText[n]);
129
89
  var testWidth = metrics.width;
@@ -131,18 +91,14 @@ export default class PlaneModal1 extends Mesh {
131
91
  this.context.fillText(line, textPos.x, textPos.y);
132
92
  line = "";
133
93
  textPos.y += size;
134
- } else {
94
+ }
95
+ else {
135
96
  line += arrText[n];
136
97
  }
137
98
  }
138
-
139
99
  this.context.fillText(line, textPos.x, textPos.y);
140
100
  textPos.y += size;
141
101
  });
142
-
143
102
  this.texture.needsUpdate = true;
144
-
145
103
  }
146
-
147
-
148
- }
104
+ }