@tresjs/core 5.0.0-next.1 → 5.0.0-next.3
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/dist/src/components/TresCanvas.vue.d.ts +66 -64
- package/dist/src/composables/index.d.ts +0 -2
- package/dist/src/composables/useCamera/index.d.ts +6 -6
- package/dist/src/composables/useEventManager/index.d.ts +10 -0
- package/dist/src/composables/useRenderer/useRendererManager.d.ts +152 -63
- package/dist/src/composables/useTres/index.d.ts +4 -3
- package/dist/src/composables/useTresContextProvider/index.d.ts +5 -11
- package/dist/src/types/index.d.ts +3 -74
- package/dist/src/utils/pointerEvents.d.ts +10 -0
- package/dist/tres.js +2406 -1798
- package/package.json +3 -2
- package/dist/src/composables/useRaycaster/index.d.ts +0 -16
- package/dist/src/composables/useRenderer/const.d.ts +0 -18
- package/dist/src/composables/useTresEventManager/index.d.ts +0 -28
|
@@ -1,85 +1,87 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
5
|
-
export interface TresCanvasProps extends
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
preset?: RendererPresetsType;
|
|
1
|
+
import { TresCamera } from '../types/';
|
|
2
|
+
import { PointerEvent } from '@pmndrs/pointer-events';
|
|
3
|
+
import { RendererOptions, TresContext, TresRenderer } from '../composables';
|
|
4
|
+
import * as THREE from 'three';
|
|
5
|
+
export interface TresCanvasProps extends RendererOptions {
|
|
6
|
+
/**
|
|
7
|
+
* Custom camera instance to use as main camera
|
|
8
|
+
* If not provided, a default PerspectiveCamera will be created
|
|
9
|
+
*/
|
|
10
|
+
camera?: TresCamera;
|
|
11
|
+
/**
|
|
12
|
+
* Whether the canvas should be sized to the window
|
|
13
|
+
* When true, canvas will be fixed positioned and full viewport size
|
|
14
|
+
* @default false
|
|
15
|
+
*/
|
|
17
16
|
windowSize?: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Whether to enable the provide/inject bridge between Vue and TresJS
|
|
19
|
+
* When true, Vue's provide/inject will work across the TresJS boundary
|
|
20
|
+
* @default true
|
|
21
|
+
*/
|
|
18
22
|
enableProvideBridge?: boolean;
|
|
19
23
|
}
|
|
20
|
-
declare
|
|
21
|
-
attrs: Partial<{}>;
|
|
22
|
-
slots: Readonly<{
|
|
23
|
-
default: () => any;
|
|
24
|
-
}> & {
|
|
25
|
-
default: () => any;
|
|
26
|
-
};
|
|
27
|
-
refs: {
|
|
28
|
-
canvas: HTMLCanvasElement;
|
|
29
|
-
};
|
|
30
|
-
rootEl: HTMLCanvasElement;
|
|
31
|
-
};
|
|
32
|
-
type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
|
|
33
|
-
declare const __VLS_component: import('vue').DefineComponent<TresCanvasProps, {
|
|
24
|
+
declare const _default: __VLS_WithTemplateSlots<import('vue').DefineComponent<TresCanvasProps, {
|
|
34
25
|
context: import('vue').ShallowRef<TresContext | null, TresContext | null>;
|
|
35
26
|
dispose: () => void;
|
|
36
27
|
}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
37
|
-
render: (renderer:
|
|
38
|
-
click: (event:
|
|
39
|
-
|
|
28
|
+
render: (renderer: TresRenderer) => any;
|
|
29
|
+
click: (event: PointerEvent<MouseEvent>) => any;
|
|
30
|
+
contextmenu: (event: PointerEvent<MouseEvent>) => any;
|
|
31
|
+
pointermove: (event: PointerEvent<MouseEvent>) => any;
|
|
32
|
+
pointerenter: (event: PointerEvent<MouseEvent>) => any;
|
|
33
|
+
pointerleave: (event: PointerEvent<MouseEvent>) => any;
|
|
34
|
+
pointerover: (event: PointerEvent<MouseEvent>) => any;
|
|
35
|
+
pointerout: (event: PointerEvent<MouseEvent>) => any;
|
|
36
|
+
dblclick: (event: PointerEvent<MouseEvent>) => any;
|
|
37
|
+
pointerdown: (event: PointerEvent<MouseEvent>) => any;
|
|
38
|
+
pointerup: (event: PointerEvent<MouseEvent>) => any;
|
|
39
|
+
pointercancel: (event: PointerEvent<MouseEvent>) => any;
|
|
40
|
+
lostpointercapture: (event: PointerEvent<MouseEvent>) => any;
|
|
41
|
+
wheel: (event: PointerEvent<MouseEvent>) => any;
|
|
40
42
|
ready: (context: TresContext) => any;
|
|
41
|
-
|
|
42
|
-
contextMenu: (event: TresPointerEvent) => any;
|
|
43
|
-
pointerMove: (event: TresPointerEvent) => any;
|
|
44
|
-
pointerUp: (event: TresPointerEvent) => any;
|
|
45
|
-
pointerDown: (event: TresPointerEvent) => any;
|
|
46
|
-
pointerEnter: (event: TresPointerEvent) => any;
|
|
47
|
-
pointerLeave: (event: TresPointerEvent) => any;
|
|
48
|
-
pointerOver: (event: TresPointerEvent) => any;
|
|
49
|
-
pointerOut: (event: TresPointerEvent) => any;
|
|
50
|
-
pointerMissed: (event: TresPointerEvent) => any;
|
|
43
|
+
pointermissed: (event: PointerEvent<MouseEvent>) => any;
|
|
51
44
|
}, string, import('vue').PublicProps, Readonly<TresCanvasProps> & Readonly<{
|
|
52
|
-
onRender?: ((renderer:
|
|
53
|
-
onClick?: ((event:
|
|
54
|
-
|
|
45
|
+
onRender?: ((renderer: TresRenderer) => any) | undefined;
|
|
46
|
+
onClick?: ((event: PointerEvent<MouseEvent>) => any) | undefined;
|
|
47
|
+
onContextmenu?: ((event: PointerEvent<MouseEvent>) => any) | undefined;
|
|
48
|
+
onPointermove?: ((event: PointerEvent<MouseEvent>) => any) | undefined;
|
|
49
|
+
onPointerenter?: ((event: PointerEvent<MouseEvent>) => any) | undefined;
|
|
50
|
+
onPointerleave?: ((event: PointerEvent<MouseEvent>) => any) | undefined;
|
|
51
|
+
onPointerover?: ((event: PointerEvent<MouseEvent>) => any) | undefined;
|
|
52
|
+
onPointerout?: ((event: PointerEvent<MouseEvent>) => any) | undefined;
|
|
53
|
+
onDblclick?: ((event: PointerEvent<MouseEvent>) => any) | undefined;
|
|
54
|
+
onPointerdown?: ((event: PointerEvent<MouseEvent>) => any) | undefined;
|
|
55
|
+
onPointerup?: ((event: PointerEvent<MouseEvent>) => any) | undefined;
|
|
56
|
+
onPointercancel?: ((event: PointerEvent<MouseEvent>) => any) | undefined;
|
|
57
|
+
onLostpointercapture?: ((event: PointerEvent<MouseEvent>) => any) | undefined;
|
|
58
|
+
onWheel?: ((event: PointerEvent<MouseEvent>) => any) | undefined;
|
|
55
59
|
onReady?: ((context: TresContext) => any) | undefined;
|
|
56
|
-
|
|
57
|
-
onContextMenu?: ((event: TresPointerEvent) => any) | undefined;
|
|
58
|
-
onPointerMove?: ((event: TresPointerEvent) => any) | undefined;
|
|
59
|
-
onPointerUp?: ((event: TresPointerEvent) => any) | undefined;
|
|
60
|
-
onPointerDown?: ((event: TresPointerEvent) => any) | undefined;
|
|
61
|
-
onPointerEnter?: ((event: TresPointerEvent) => any) | undefined;
|
|
62
|
-
onPointerLeave?: ((event: TresPointerEvent) => any) | undefined;
|
|
63
|
-
onPointerOver?: ((event: TresPointerEvent) => any) | undefined;
|
|
64
|
-
onPointerOut?: ((event: TresPointerEvent) => any) | undefined;
|
|
65
|
-
onPointerMissed?: ((event: TresPointerEvent) => any) | undefined;
|
|
60
|
+
onPointermissed?: ((event: PointerEvent<MouseEvent>) => any) | undefined;
|
|
66
61
|
}>, {
|
|
62
|
+
toneMapping: THREE.ToneMapping;
|
|
67
63
|
alpha: boolean;
|
|
68
|
-
|
|
64
|
+
logarithmicDepthBuffer: boolean;
|
|
65
|
+
depth: boolean;
|
|
69
66
|
stencil: boolean;
|
|
67
|
+
windowSize: boolean;
|
|
68
|
+
clearColor: THREE.ColorRepresentation;
|
|
69
|
+
shadowMapType: THREE.ShadowMapType;
|
|
70
|
+
enableProvideBridge: boolean;
|
|
71
|
+
antialias: boolean;
|
|
70
72
|
preserveDrawingBuffer: boolean;
|
|
71
|
-
depth: boolean;
|
|
72
73
|
failIfMajorPerformanceCaveat: boolean;
|
|
73
|
-
|
|
74
|
+
clearAlpha: number;
|
|
74
75
|
shadows: boolean;
|
|
75
76
|
useLegacyLights: boolean;
|
|
76
|
-
windowSize: boolean;
|
|
77
77
|
renderMode: "always" | "on-demand" | "manual";
|
|
78
|
-
enableProvideBridge: boolean;
|
|
79
78
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
|
|
80
|
-
|
|
81
|
-
}, HTMLCanvasElement
|
|
82
|
-
|
|
79
|
+
canvasRef: HTMLCanvasElement;
|
|
80
|
+
}, HTMLCanvasElement>, Readonly<{
|
|
81
|
+
default: () => any;
|
|
82
|
+
}> & {
|
|
83
|
+
default: () => any;
|
|
84
|
+
}>;
|
|
83
85
|
export default _default;
|
|
84
86
|
type __VLS_WithTemplateSlots<T, S> = T & {
|
|
85
87
|
new (): {
|
|
@@ -3,10 +3,8 @@ export * from './useCamera';
|
|
|
3
3
|
export * from './useGraph';
|
|
4
4
|
export * from './useLoader';
|
|
5
5
|
export * from './useLoop';
|
|
6
|
-
export * from './useRaycaster';
|
|
7
6
|
export * from './useRenderer/useRendererManager';
|
|
8
7
|
export * from './useRenderLoop';
|
|
9
8
|
export * from './useTres';
|
|
10
9
|
export * from './useTresContextProvider';
|
|
11
|
-
export * from './useTresEventManager';
|
|
12
10
|
export { UseLoader };
|
|
@@ -1,31 +1,31 @@
|
|
|
1
1
|
import { TresContext } from '../useTresContextProvider';
|
|
2
2
|
import { ComputedRef, Ref } from 'vue';
|
|
3
|
-
import {
|
|
3
|
+
import { TresCamera } from '../../types';
|
|
4
4
|
/**
|
|
5
5
|
* Interface for the return value of the useCamera composable
|
|
6
6
|
*/
|
|
7
7
|
export interface UseCameraReturn {
|
|
8
|
-
activeCamera: ComputedRef<
|
|
8
|
+
activeCamera: ComputedRef<TresCamera>;
|
|
9
9
|
/**
|
|
10
10
|
* The list of cameras
|
|
11
11
|
*/
|
|
12
|
-
cameras: Ref<
|
|
12
|
+
cameras: Ref<TresCamera[]>;
|
|
13
13
|
/**
|
|
14
14
|
* Register a camera
|
|
15
15
|
* @param camera - The camera to register
|
|
16
16
|
* @param active - Whether to set the camera as active
|
|
17
17
|
*/
|
|
18
|
-
registerCamera: (camera:
|
|
18
|
+
registerCamera: (camera: TresCamera, active?: boolean) => void;
|
|
19
19
|
/**
|
|
20
20
|
* Deregister a camera
|
|
21
21
|
* @param camera - The camera to deregister
|
|
22
22
|
*/
|
|
23
|
-
deregisterCamera: (camera:
|
|
23
|
+
deregisterCamera: (camera: TresCamera) => void;
|
|
24
24
|
/**
|
|
25
25
|
* Set the active camera
|
|
26
26
|
* @param cameraOrUuid - The camera or its UUID to set as active
|
|
27
27
|
*/
|
|
28
|
-
setActiveCamera: (cameraOrUuid: string |
|
|
28
|
+
setActiveCamera: (cameraOrUuid: string | TresCamera) => void;
|
|
29
29
|
}
|
|
30
30
|
/**
|
|
31
31
|
* Interface for the parameters of the useCamera composable
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { PointerEvent, PointerEventsMap } from '@pmndrs/pointer-events';
|
|
2
|
+
import { Event, Object3D, Object3DEventMap } from 'three';
|
|
3
|
+
import { MaybeRef } from 'vue';
|
|
4
|
+
import { TresContext } from '../useTresContextProvider';
|
|
5
|
+
export declare function useEventManager({ canvas, contextParts: { scene, camera, loop }, }: {
|
|
6
|
+
canvas: MaybeRef<HTMLCanvasElement>;
|
|
7
|
+
contextParts: Pick<TresContext, 'scene' | 'camera' | 'loop'>;
|
|
8
|
+
}): {
|
|
9
|
+
onPointerMissed: import('@vueuse/core').EventHookOn<PointerEvent<MouseEvent> & Event<"click", Object3D<Object3DEventMap & PointerEventsMap>>>;
|
|
10
|
+
};
|
|
@@ -1,99 +1,188 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { RendererLoop } from './../../core/loop';
|
|
2
|
+
import { ColorRepresentation, ColorSpace, ShadowMapType, ToneMapping, WebGLRenderer } from 'three';
|
|
3
3
|
import { TresContext } from '../useTresContextProvider';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
};
|
|
4
|
+
import { MaybeRef, ShallowRef } from 'vue';
|
|
5
|
+
import { Renderer } from 'three/webgpu';
|
|
6
|
+
import { SizesType } from '../useSizes';
|
|
7
|
+
import { UseCameraReturn } from '../useCamera';
|
|
8
|
+
import { TresScene } from '../../types';
|
|
10
9
|
/**
|
|
11
10
|
* If set to 'on-demand', the scene will only be rendered when the current frame is invalidated
|
|
12
11
|
* If set to 'manual', the scene will only be rendered when advance() is called
|
|
13
12
|
* If set to 'always', the scene will be rendered every frame
|
|
14
13
|
*/
|
|
15
14
|
export type RenderMode = 'always' | 'on-demand' | 'manual';
|
|
16
|
-
export
|
|
15
|
+
export type TresRenderer = WebGLRenderer | Renderer;
|
|
16
|
+
export interface RendererOptions {
|
|
17
|
+
/**
|
|
18
|
+
* WebGL Context options (Readonly because they are passed to the renderer constructor)
|
|
19
|
+
* They can't be changed after the renderer is created because they are passed to the canvas context
|
|
20
|
+
*/
|
|
21
|
+
antialias?: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Enables stencil buffer with 8 bits.
|
|
24
|
+
* Required for stencil-based operations like shadow volumes or post-processing effects.
|
|
25
|
+
* @readonly
|
|
26
|
+
* @default true
|
|
27
|
+
*/
|
|
28
|
+
stencil?: boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Enables depth buffer with at least 16 bits.
|
|
31
|
+
* Required for proper 3D rendering and depth testing.
|
|
32
|
+
* @readonly
|
|
33
|
+
* @default true
|
|
34
|
+
*/
|
|
35
|
+
depth?: boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Sets the shader precision of the renderer.
|
|
38
|
+
* @see {@link https://threejs.org/docs/#api/en/renderers/WebGLRenderer}
|
|
39
|
+
* @default 'highp'
|
|
40
|
+
*/
|
|
41
|
+
precision?: 'highp' | 'mediump' | 'lowp';
|
|
42
|
+
/**
|
|
43
|
+
* Enables logarithmic depth buffer. Useful for scenes with large differences in scale.
|
|
44
|
+
* Helps prevent z-fighting in scenes with objects very close and very far from the camera.
|
|
45
|
+
* @readonly
|
|
46
|
+
* @default false
|
|
47
|
+
*/
|
|
48
|
+
logarithmicDepthBuffer?: boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Preserves the buffers until manually cleared or overwritten.
|
|
51
|
+
* Needed for screenshots or when reading pixels from the canvas.
|
|
52
|
+
* Warning: This may impact performance.
|
|
53
|
+
* @readonly
|
|
54
|
+
* @default false
|
|
55
|
+
*/
|
|
56
|
+
preserveDrawingBuffer?: boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Power preference for the renderer.
|
|
59
|
+
* Power preference for the renderer.
|
|
60
|
+
* - `default`: Automatically chooses the most suitable power setting.
|
|
61
|
+
* - `high-performance`: Prioritizes rendering performance.
|
|
62
|
+
* - `low-power`: Tries to reduce power usage.
|
|
63
|
+
* @see {@link https://threejs.org/docs/#api/en/renderers/WebGLRenderer}
|
|
64
|
+
* @default 'default'
|
|
65
|
+
* @readonly
|
|
66
|
+
*/
|
|
67
|
+
powerPreference?: WebGLPowerPreference;
|
|
68
|
+
/**
|
|
69
|
+
* Whether to create the WebGL context with an alpha buffer.
|
|
70
|
+
* This is a WebGL context option that must be set during context creation and cannot be changed later.
|
|
71
|
+
* When true, the canvas can be transparent, showing content behind it.
|
|
72
|
+
* @readonly
|
|
73
|
+
* @default false
|
|
74
|
+
*/
|
|
75
|
+
alpha?: boolean;
|
|
76
|
+
/**
|
|
77
|
+
* Whether to premultiply the alpha of the canvas.
|
|
78
|
+
* @see {@link https://threejs.org/docs/#api/en/renderers/WebGLRenderer}
|
|
79
|
+
* @default true
|
|
80
|
+
*/
|
|
81
|
+
premultipliedAlpha?: boolean;
|
|
17
82
|
/**
|
|
18
|
-
*
|
|
19
|
-
*
|
|
83
|
+
* Whether to fail if the major performance caveat is detected.
|
|
84
|
+
* @see {@link https://threejs.org/docs/#api/en/renderers/WebGLRenderer}
|
|
20
85
|
* @default false
|
|
21
86
|
*/
|
|
22
|
-
|
|
87
|
+
failIfMajorPerformanceCaveat?: boolean;
|
|
88
|
+
/**
|
|
89
|
+
* WebGL options with set methods
|
|
90
|
+
* @see {@link https://threejs.org/docs/#api/en/renderers/WebGLRenderer}
|
|
91
|
+
*/
|
|
92
|
+
/**
|
|
93
|
+
* Clear color for the canvas
|
|
94
|
+
* Can include alpha value (e.g. '#00808000' for fully transparent teal)
|
|
95
|
+
*/
|
|
96
|
+
clearColor?: ColorRepresentation;
|
|
23
97
|
/**
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* @default PCFSoftShadowMap
|
|
98
|
+
* The opacity of the clear color (0-1)
|
|
99
|
+
* Controls the transparency of the clear color
|
|
100
|
+
* @default 1
|
|
29
101
|
*/
|
|
30
|
-
|
|
102
|
+
clearAlpha?: number;
|
|
31
103
|
/**
|
|
32
|
-
*
|
|
33
|
-
* See the [lights / physical example](https://threejs.org/examples/#webgl_lights_physical).
|
|
34
|
-
*
|
|
104
|
+
* Enable shadow rendering in the scene
|
|
35
105
|
* @default false
|
|
36
|
-
* @deprecated Use {@link WebGLRenderer.useLegacyLights useLegacyLights} instead.
|
|
37
106
|
*/
|
|
38
|
-
|
|
107
|
+
shadows?: boolean;
|
|
108
|
+
/**
|
|
109
|
+
* Tone mapping technique to use for the scene
|
|
110
|
+
* - `NoToneMapping`: No tone mapping is applied.
|
|
111
|
+
* - `LinearToneMapping`: Linear tone mapping.
|
|
112
|
+
* - `ReinhardToneMapping`: Reinhard tone mapping.
|
|
113
|
+
* - `CineonToneMapping`: Cineon tone mapping.
|
|
114
|
+
* - `ACESFilmicToneMapping`: ACES Filmic tone mapping.
|
|
115
|
+
* - `AgXToneMapping`: AgX tone mapping.
|
|
116
|
+
* - `NeutralToneMapping`: Neutral tone mapping.
|
|
117
|
+
* @see {@link https://threejs.org/docs/#api/en/constants/Renderer}
|
|
118
|
+
* @default ACESFilmicToneMapping (Opinionated default by TresJS)
|
|
119
|
+
*/
|
|
120
|
+
toneMapping?: ToneMapping;
|
|
39
121
|
/**
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
122
|
+
* Type of shadow map to use for shadow calculations
|
|
123
|
+
* - `BasicShadowMap`: Basic shadow map.
|
|
124
|
+
* - `PCFShadowMap`: Percentage-Closer Filtering shadow map.
|
|
125
|
+
* - `PCFSoftShadowMap`: Percentage-Closer Filtering soft shadow map.
|
|
126
|
+
* - `VSMShadowMap`: Variance shadow map.
|
|
127
|
+
* @see {@link https://threejs.org/docs/#api/en/constants/Renderer}
|
|
128
|
+
* @default PCFSoftShadowMap (Opinionated default by TresJS)
|
|
44
129
|
*/
|
|
45
|
-
|
|
130
|
+
shadowMapType?: ShadowMapType;
|
|
46
131
|
/**
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
* @default LinearSRGBColorSpace
|
|
132
|
+
* Whether to use legacy lights system instead of the new one
|
|
133
|
+
* @deprecated Use `useLegacyLights: false` for the new lighting system
|
|
51
134
|
*/
|
|
52
|
-
|
|
135
|
+
useLegacyLights?: boolean;
|
|
53
136
|
/**
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
* ReinhardToneMapping, Uncharted2ToneMapping,
|
|
57
|
-
* CineonToneMapping, ACESFilmicToneMapping,
|
|
58
|
-
* CustomToneMapping
|
|
59
|
-
*
|
|
60
|
-
* @default ACESFilmicToneMapping
|
|
137
|
+
* Color space for the output render
|
|
138
|
+
* @see {@link https://threejs.org/docs/#api/en/constants/Renderer}
|
|
61
139
|
*/
|
|
62
|
-
|
|
140
|
+
outputColorSpace?: ColorSpace;
|
|
63
141
|
/**
|
|
64
|
-
*
|
|
65
|
-
*
|
|
142
|
+
* Exposure level of tone mapping
|
|
66
143
|
* @default 1
|
|
67
144
|
*/
|
|
68
|
-
toneMappingExposure?:
|
|
145
|
+
toneMappingExposure?: number;
|
|
146
|
+
/**
|
|
147
|
+
* Rendering mode for the canvas
|
|
148
|
+
* - 'always': Renders every frame
|
|
149
|
+
* - 'on-demand': Renders only when changes are detected
|
|
150
|
+
* - 'manual': Renders only when explicitly called
|
|
151
|
+
* @default 'always'
|
|
152
|
+
*/
|
|
153
|
+
renderMode?: 'always' | 'on-demand' | 'manual';
|
|
69
154
|
/**
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
* @default 0x000000
|
|
155
|
+
* Device Pixel Ratio for the renderer
|
|
156
|
+
* Can be a single number or a tuple defining a range [min, max]
|
|
73
157
|
*/
|
|
74
|
-
|
|
75
|
-
windowSize?: MaybeRefOrGetter<boolean | string>;
|
|
76
|
-
preset?: MaybeRefOrGetter<RendererPresetsType>;
|
|
77
|
-
renderMode?: MaybeRef<RenderMode>;
|
|
158
|
+
dpr?: number | [number, number];
|
|
78
159
|
/**
|
|
79
|
-
*
|
|
80
|
-
*
|
|
160
|
+
* Custom WebGL renderer instance
|
|
161
|
+
* Allows using a pre-configured renderer instead of creating a new one
|
|
81
162
|
*/
|
|
82
|
-
|
|
163
|
+
renderer?: (ctx: TresRendererSetupContext) => TresRenderer;
|
|
164
|
+
}
|
|
165
|
+
export interface TresRendererSetupContext {
|
|
166
|
+
sizes: SizesType;
|
|
167
|
+
scene: ShallowRef<TresScene>;
|
|
168
|
+
camera: UseCameraReturn;
|
|
169
|
+
loop: RendererLoop;
|
|
170
|
+
canvas: MaybeRef<HTMLCanvasElement>;
|
|
83
171
|
}
|
|
84
|
-
export
|
|
85
|
-
scene:
|
|
172
|
+
export interface UseRendererOptions {
|
|
173
|
+
scene: ShallowRef<TresScene>;
|
|
86
174
|
canvas: MaybeRef<HTMLCanvasElement>;
|
|
87
|
-
options:
|
|
175
|
+
options: RendererOptions;
|
|
88
176
|
contextParts: Pick<TresContext, 'sizes' | 'camera' | 'loop'>;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
|
|
177
|
+
}
|
|
178
|
+
export declare function useRendererManager({ scene, canvas, options, contextParts: { sizes, loop, camera }, }: UseRendererOptions): {
|
|
179
|
+
instance: TresRenderer;
|
|
92
180
|
advance: () => void;
|
|
93
|
-
onRender: import('@vueuse/core').
|
|
181
|
+
onRender: import('@vueuse/core').EventHookOn<TresRenderer>;
|
|
182
|
+
onReady: import('@vueuse/core').EventHookOn<TresRenderer>;
|
|
94
183
|
invalidate: (amountOfFramesToInvalidate?: number) => void;
|
|
95
184
|
canBeInvalidated: import('vue').ComputedRef<boolean>;
|
|
96
|
-
|
|
185
|
+
frames: import('vue').Ref<number, number>;
|
|
186
|
+
mode: "always" | "on-demand" | "manual" | undefined;
|
|
97
187
|
};
|
|
98
188
|
export type UseRendererManagerReturn = ReturnType<typeof useRendererManager>;
|
|
99
|
-
export {};
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { ComputedRef } from 'vue';
|
|
2
2
|
import { TresContext } from '../useTresContextProvider';
|
|
3
|
-
import { Camera
|
|
3
|
+
import { Camera } from 'three';
|
|
4
|
+
import { TresRenderer } from '..';
|
|
4
5
|
export interface TresPartialContext extends Omit<TresContext, 'renderer' | 'camera'> {
|
|
5
6
|
/**
|
|
6
7
|
* The renderer instance
|
|
7
8
|
*
|
|
8
|
-
* @type {
|
|
9
|
+
* @type {TresRenderer}
|
|
9
10
|
* @memberof TresPartialContext
|
|
10
11
|
*/
|
|
11
|
-
renderer:
|
|
12
|
+
renderer: TresRenderer;
|
|
12
13
|
/**
|
|
13
14
|
* The current active camera
|
|
14
15
|
*
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import { Raycaster } from 'three';
|
|
2
1
|
import { MaybeRef, MaybeRefOrGetter, Ref, ShallowRef } from 'vue';
|
|
3
2
|
import { RendererLoop } from '../../core/loop';
|
|
4
|
-
import { TresControl,
|
|
5
|
-
import {
|
|
3
|
+
import { TresControl, TresScene } from '../../types';
|
|
4
|
+
import { RendererOptions, UseRendererManagerReturn } from '../useRenderer/useRendererManager';
|
|
6
5
|
import { UseCameraReturn } from '../useCamera/';
|
|
7
6
|
import { SizesType } from '../useSizes';
|
|
8
|
-
import {
|
|
7
|
+
import { useEventManager } from '../useEventManager';
|
|
9
8
|
export interface TresContext {
|
|
10
9
|
scene: ShallowRef<TresScene>;
|
|
11
10
|
sizes: SizesType;
|
|
@@ -13,18 +12,13 @@ export interface TresContext {
|
|
|
13
12
|
camera: UseCameraReturn;
|
|
14
13
|
controls: Ref<TresControl | null>;
|
|
15
14
|
renderer: UseRendererManagerReturn;
|
|
16
|
-
raycaster: ShallowRef<Raycaster>;
|
|
17
15
|
loop: RendererLoop;
|
|
18
|
-
|
|
19
|
-
registerObjectAtPointerEventHandler?: (object: TresObject) => void;
|
|
20
|
-
deregisterObjectAtPointerEventHandler?: (object: TresObject) => void;
|
|
21
|
-
registerBlockingObjectAtPointerEventHandler?: (object: TresObject) => void;
|
|
22
|
-
deregisterBlockingObjectAtPointerEventHandler?: (object: TresObject) => void;
|
|
16
|
+
events: ReturnType<typeof useEventManager>;
|
|
23
17
|
}
|
|
24
18
|
export declare function useTresContextProvider({ scene, canvas, windowSize, rendererOptions, }: {
|
|
25
19
|
scene: TresScene;
|
|
26
20
|
canvas: MaybeRef<HTMLCanvasElement>;
|
|
27
21
|
windowSize: MaybeRefOrGetter<boolean>;
|
|
28
|
-
rendererOptions:
|
|
22
|
+
rendererOptions: RendererOptions;
|
|
29
23
|
}): TresContext;
|
|
30
24
|
export declare function useTresContext(): TresContext;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { DefineComponent, VNode, VNodeRef } from 'vue';
|
|
2
2
|
import { TresContext } from '../composables/useTresContextProvider';
|
|
3
|
+
import { PointerEventHandlers } from '../utils/pointerEvents';
|
|
3
4
|
import type * as THREE from 'three';
|
|
4
5
|
export type AttachFnType = (parent: any, self: TresInstance) => () => void;
|
|
5
6
|
export type AttachType = string | AttachFnType;
|
|
@@ -17,13 +18,6 @@ export type Args<T> = T extends ConstructorRepresentation ? ConstructorParameter
|
|
|
17
18
|
export interface TresCatalogue {
|
|
18
19
|
[name: string]: ConstructorRepresentation;
|
|
19
20
|
}
|
|
20
|
-
export declare const pointerEventTypes: readonly ["click", "double-click", "context-menu", "pointer-move", "pointer-up", "pointer-down", "pointer-enter", "pointer-leave", "pointer-over", "pointer-out", "pointer-missed", "wheel"];
|
|
21
|
-
export type PointerEventType = typeof pointerEventTypes[number];
|
|
22
|
-
export interface TresPointerEvent {
|
|
23
|
-
type: PointerEventType;
|
|
24
|
-
event: TresEvent;
|
|
25
|
-
intersection?: Intersection;
|
|
26
|
-
}
|
|
27
21
|
export type TresCamera = THREE.OrthographicCamera | THREE.PerspectiveCamera;
|
|
28
22
|
/**
|
|
29
23
|
* Represents the properties of an instance.
|
|
@@ -45,9 +39,7 @@ interface TresBaseObject {
|
|
|
45
39
|
}
|
|
46
40
|
export interface LocalState {
|
|
47
41
|
type: string;
|
|
48
|
-
eventCount: number;
|
|
49
42
|
root: TresContext;
|
|
50
|
-
handlers: Partial<EventHandlers>;
|
|
51
43
|
memoizedProps: {
|
|
52
44
|
[key: string]: any;
|
|
53
45
|
};
|
|
@@ -77,69 +69,6 @@ export interface TresScene extends THREE.Scene {
|
|
|
77
69
|
root: TresContext;
|
|
78
70
|
};
|
|
79
71
|
}
|
|
80
|
-
export interface Intersection extends THREE.Intersection {
|
|
81
|
-
/** The event source (the object which registered the handler) */
|
|
82
|
-
eventObject: TresObject;
|
|
83
|
-
}
|
|
84
|
-
export interface IntersectionEvent<TSourceEvent> extends Intersection {
|
|
85
|
-
/** The event source (the object which registered the handler) */
|
|
86
|
-
eventObject: TresObject;
|
|
87
|
-
/** An array of intersections */
|
|
88
|
-
intersections: Intersection[];
|
|
89
|
-
/** vec3.set(pointer.x, pointer.y, 0).unproject(camera) */
|
|
90
|
-
unprojectedPoint: THREE.Vector3;
|
|
91
|
-
/** Normalized event coordinates */
|
|
92
|
-
pointer: THREE.Vector2;
|
|
93
|
-
/** Delta between first click and this event */
|
|
94
|
-
delta: number;
|
|
95
|
-
/** The ray that pierced it */
|
|
96
|
-
ray: THREE.Ray;
|
|
97
|
-
/** The camera that was used by the raycaster */
|
|
98
|
-
camera: THREE.Camera;
|
|
99
|
-
/** stopPropagation will stop underlying handlers from firing */
|
|
100
|
-
stopPropagation: () => void;
|
|
101
|
-
/** The original host event */
|
|
102
|
-
nativeEvent: TSourceEvent;
|
|
103
|
-
/** If the event was stopped by calling stopPropagation */
|
|
104
|
-
stopped: boolean;
|
|
105
|
-
}
|
|
106
|
-
export type ThreeEvent<TEvent> = IntersectionEvent<TEvent> & Properties<TEvent>;
|
|
107
|
-
export type DomEvent = PointerEvent | MouseEvent | WheelEvent;
|
|
108
|
-
export interface TresEvent {
|
|
109
|
-
eventObject: TresObject;
|
|
110
|
-
event: DomEvent;
|
|
111
|
-
stopPropagation: () => void;
|
|
112
|
-
stopPropagating: boolean;
|
|
113
|
-
intersections: Intersection[];
|
|
114
|
-
intersects: Intersection[];
|
|
115
|
-
}
|
|
116
|
-
export interface Events {
|
|
117
|
-
onClick: EventListener;
|
|
118
|
-
onContextMenu: EventListener;
|
|
119
|
-
onDoubleClick: EventListener;
|
|
120
|
-
onWheel: EventListener;
|
|
121
|
-
onPointerDown: EventListener;
|
|
122
|
-
onPointerUp: EventListener;
|
|
123
|
-
onPointerLeave: EventListener;
|
|
124
|
-
onPointerMove: EventListener;
|
|
125
|
-
onPointerCancel: EventListener;
|
|
126
|
-
onLostPointerCapture: EventListener;
|
|
127
|
-
}
|
|
128
|
-
export interface EventHandlers {
|
|
129
|
-
onClick?: (event: ThreeEvent<MouseEvent>) => void;
|
|
130
|
-
onContextMenu?: (event: ThreeEvent<MouseEvent>) => void;
|
|
131
|
-
onDoubleClick?: (event: ThreeEvent<MouseEvent>) => void;
|
|
132
|
-
onPointerUp?: (event: ThreeEvent<PointerEvent>) => void;
|
|
133
|
-
onPointerDown?: (event: ThreeEvent<PointerEvent>) => void;
|
|
134
|
-
onPointerOver?: (event: ThreeEvent<PointerEvent>) => void;
|
|
135
|
-
onPointerOut?: (event: ThreeEvent<PointerEvent>) => void;
|
|
136
|
-
onPointerEnter?: (event: ThreeEvent<PointerEvent>) => void;
|
|
137
|
-
onPointerLeave?: (event: ThreeEvent<PointerEvent>) => void;
|
|
138
|
-
onPointerMove?: (event: ThreeEvent<PointerEvent>) => void;
|
|
139
|
-
onPointerMissed?: (event: MouseEvent) => void;
|
|
140
|
-
onPointerCancel?: (event: ThreeEvent<PointerEvent>) => void;
|
|
141
|
-
onWheel?: (event: ThreeEvent<WheelEvent>) => void;
|
|
142
|
-
}
|
|
143
72
|
interface MathRepresentation {
|
|
144
73
|
set(...args: number[] | [THREE.ColorRepresentation]): any;
|
|
145
74
|
}
|
|
@@ -170,7 +99,8 @@ export type WithMathProps<P> = {
|
|
|
170
99
|
interface RaycastableRepresentation {
|
|
171
100
|
raycast: (raycaster: THREE.Raycaster, intersects: THREE.Intersection[]) => void;
|
|
172
101
|
}
|
|
173
|
-
type EventProps<P> = P extends RaycastableRepresentation ? Partial<
|
|
102
|
+
type EventProps<P> = P extends RaycastableRepresentation ? Partial<PointerEventHandlers> : unknown;
|
|
103
|
+
export type { TresPointerEvent } from '../utils/pointerEvents';
|
|
174
104
|
export interface VueProps {
|
|
175
105
|
children?: VNode[];
|
|
176
106
|
ref?: VNodeRef;
|
|
@@ -195,4 +125,3 @@ declare module 'vue' {
|
|
|
195
125
|
primitive: DefineComponent<TresPrimitive>;
|
|
196
126
|
}
|
|
197
127
|
}
|
|
198
|
-
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { PointerEvent } from '@pmndrs/pointer-events';
|
|
2
|
+
export declare const supportedPointerEvents: readonly ["onClick", "onContextmenu", "onPointermove", "onPointerenter", "onPointerleave", "onPointerover", "onPointerout", "onDblclick", "onPointerdown", "onPointerup", "onPointercancel", "onLostpointercapture", "onWheel"];
|
|
3
|
+
export type SupportedVuePointerEvent = typeof supportedPointerEvents[number];
|
|
4
|
+
export type TresPointerEventName = 'click' | 'contextmenu' | 'pointermove' | 'pointerenter' | 'pointerleave' | 'pointerover' | 'pointerout' | 'dblclick' | 'pointerdown' | 'pointerup' | 'pointercancel' | 'lostpointercapture' | 'wheel';
|
|
5
|
+
export declare const pointerEventsMapVueToThree: Record<SupportedVuePointerEvent, TresPointerEventName>;
|
|
6
|
+
export declare const isSupportedPointerEvent: (event: string) => event is SupportedVuePointerEvent;
|
|
7
|
+
export type TresPointerEvent = PointerEvent<MouseEvent>;
|
|
8
|
+
export type PointerEventHandlers = {
|
|
9
|
+
[key in SupportedVuePointerEvent]: (event: TresPointerEvent) => void;
|
|
10
|
+
};
|