@@ -11,7 +11,15 @@ import {
11
11
WebGLRenderer ,
12
12
} from 'three'
13
13
import { PointerEventsMap , forwardHtmlEvents } from '@pmndrs/pointer-events'
14
- import { OrbitHandles , PivotHandles , RotateHandles , TransformHandles , TranslateHandles } from '@pmndrs/handle'
14
+ import {
15
+ OrbitHandles ,
16
+ PivotHandles ,
17
+ RotateHandles ,
18
+ TransformHandles ,
19
+ TranslateHandles ,
20
+ HandleStore ,
21
+ } from '@pmndrs/handle'
22
+ import { createXRStore } from '@pmndrs/xr'
15
23
16
24
const camera = new PerspectiveCamera ( 70 , 1 , 0.01 , 100 )
17
25
camera . position . set ( 0 , 0 , 2 )
@@ -28,13 +36,10 @@ const box1 = new Mesh<BoxGeometry, MeshBasicMaterial, Object3DEventMap & Pointer
28
36
)
29
37
pivot . add ( box1 )
30
38
31
- const x = new Group ( )
32
- scene . add ( x )
33
-
34
39
const transform = new TransformHandles ( )
35
40
transform . rotation . y = Math . PI / 4
36
41
transform . position . z = - 2
37
- x . add ( transform )
42
+ scene . add ( transform )
38
43
transform . bind ( 'translate' )
39
44
transform . space = 'local'
40
45
@@ -44,6 +49,17 @@ const box2 = new Mesh<BoxGeometry, MeshBasicMaterial, Object3DEventMap & Pointer
44
49
)
45
50
transform . add ( box2 )
46
51
52
+ const box3 = new Mesh < BoxGeometry , MeshBasicMaterial , Object3DEventMap & PointerEventsMap > (
53
+ new BoxGeometry ( ) ,
54
+ new MeshBasicMaterial ( { color : 'blue' } ) ,
55
+ )
56
+ box3 . position . set ( 1 , 1 , 1 )
57
+ //providing the target object
58
+ const handleStore = new HandleStore ( box3 )
59
+ //binding to the handle object
60
+ handleStore . bind ( box3 )
61
+ scene . add ( box3 )
62
+
47
63
const canvas = document . getElementById ( 'root' ) as HTMLCanvasElement
48
64
49
65
//orbit (controls)
@@ -53,15 +69,23 @@ orbit.bind(scene, true)
53
69
const { update : updateForwardHtmlEvents } = forwardHtmlEvents ( canvas , ( ) => camera , scene )
54
70
55
71
const renderer = new WebGLRenderer ( { antialias : true , canvas } )
72
+ renderer . xr . enabled = true
73
+
74
+ const store = createXRStore ( canvas , scene , ( ) => camera , renderer . xr , {
75
+ emulate : false ,
76
+ /*since we already set it up seperately for demonstration purposes*/ htmlInput : false ,
77
+ } )
56
78
57
79
let prevTime : number | undefined
58
- renderer . setAnimationLoop ( ( time ) => {
80
+ renderer . setAnimationLoop ( ( time , frame ) => {
59
81
const deltaTime = prevTime == null ? 0 : time - prevTime
60
82
prevTime = time
61
83
updateForwardHtmlEvents ( )
62
84
orbit . update ( deltaTime )
63
85
pivot . update ( time , camera )
64
86
transform . update ( time , camera )
87
+ handleStore . update ( deltaTime )
88
+ store . update ( frame , deltaTime )
65
89
renderer . render ( scene , camera )
66
90
} )
67
91
0 commit comments