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.
- package/index.js +34 -0
- package/index.ts +5 -1
- package/lib/{ApngTexture.ts → ApngTexture.js} +11 -41
- package/lib/{ApngTextureManage.ts → ApngTextureManage.js} +13 -56
- package/lib/EventMesh.js +59 -0
- package/lib/{ExtrudeMesh.ts → ExtrudeMesh.js} +77 -284
- package/lib/{FPScontrol.ts → FPScontrol.js} +25 -64
- package/lib/InstancedGroupMesh.js +63 -0
- package/lib/{KeyFrameAnimation.ts → KeyFrameAnimation.js} +19 -63
- package/lib/{PlaneText.ts → PlaneText.js} +5 -34
- package/lib/{PointLight.ts → PointLight.js} +4 -18
- package/lib/Sky/{Sky.ts → Sky.js} +4 -12
- package/lib/Text3D/Text3D.js +60 -0
- package/lib/Text3D/fontController.js +200 -0
- package/lib/Text3D/gentilis.json +811 -0
- package/lib/{ThreeBase.ts → ThreeBase.js} +75 -131
- package/lib/{ThreeMouse.ts → ThreeMouse.js} +61 -168
- package/lib/{Transition.ts → Transition.js} +30 -101
- package/lib/index.d.ts +22 -0
- package/lib/{keyContorls.ts → keyContorls.js} +11 -40
- package/lib/lib/ApngTexture.d.ts +13 -0
- package/lib/lib/ApngTextureManage.d.ts +18 -0
- package/lib/lib/EventMesh.d.ts +18 -0
- package/lib/lib/ExtrudeMesh.d.ts +111 -0
- package/lib/lib/FPScontrol.d.ts +44 -0
- package/lib/lib/InstancedGroupMesh.d.ts +10 -0
- package/lib/lib/KeyFrameAnimation.d.ts +25 -0
- package/lib/lib/PlaneText.d.ts +37 -0
- package/lib/lib/PointLight.d.ts +13 -0
- package/lib/lib/Sky/Sky.d.ts +13 -0
- package/lib/lib/Text3D/Text3D.d.ts +20 -0
- package/lib/lib/Text3D/fontController.d.ts +59 -0
- package/lib/lib/ThreeBase.d.ts +59 -0
- package/lib/lib/ThreeMouse.d.ts +39 -0
- package/lib/lib/Transition.d.ts +45 -0
- package/lib/lib/keyContorls.d.ts +25 -0
- package/lib/lib/planeModal1/PlaneModal1.d.ts +32 -0
- package/lib/lib/shaders.d.ts +17 -0
- package/lib/lib/spriteModal1/SpriteModal1.d.ts +31 -0
- package/lib/lib/threeLoader.d.ts +20 -0
- package/lib/lib/threeUtils.d.ts +41 -0
- package/lib/lib/type.d.ts +0 -0
- package/lib/planeModal1/{PlaneModal1.ts → PlaneModal1.js} +33 -77
- package/lib/{shaders.ts → shaders.js} +19 -38
- package/lib/spriteModal1/{SpriteModal1.ts → SpriteModal1.js} +33 -80
- package/lib/{threeLoader.ts → threeLoader.js} +19 -45
- package/lib/{threeUtils.ts → threeUtils.js} +81 -82
- package/lib/{type.ts → type.js} +1 -4
- package/package.json +7 -6
- package/lib/EventMesh.ts +0 -79
- package/lib/InstancedGroupMesh.ts +0 -80
- package/lib/text/Text2D.ts +0 -41
- 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:
|
|
61
|
-
title:
|
|
62
|
-
titleColor:
|
|
63
|
-
texts:
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
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
|
-
}
|
|
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
|
+
}
|