Skip to content

Commit 38386f2

Browse files
committed
add simple HandleStore example to handle-vanilla
1 parent 173836f commit 38386f2

File tree

5 files changed

+41
-12
lines changed

5 files changed

+41
-12
lines changed

examples/handle-vanilla/index.ts

+30-6
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,15 @@ import {
1111
WebGLRenderer,
1212
} from 'three'
1313
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'
1523

1624
const camera = new PerspectiveCamera(70, 1, 0.01, 100)
1725
camera.position.set(0, 0, 2)
@@ -28,13 +36,10 @@ const box1 = new Mesh<BoxGeometry, MeshBasicMaterial, Object3DEventMap & Pointer
2836
)
2937
pivot.add(box1)
3038

31-
const x = new Group()
32-
scene.add(x)
33-
3439
const transform = new TransformHandles()
3540
transform.rotation.y = Math.PI / 4
3641
transform.position.z = -2
37-
x.add(transform)
42+
scene.add(transform)
3843
transform.bind('translate')
3944
transform.space = 'local'
4045

@@ -44,6 +49,17 @@ const box2 = new Mesh<BoxGeometry, MeshBasicMaterial, Object3DEventMap & Pointer
4449
)
4550
transform.add(box2)
4651

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+
4763
const canvas = document.getElementById('root') as HTMLCanvasElement
4864

4965
//orbit (controls)
@@ -53,15 +69,23 @@ orbit.bind(scene, true)
5369
const { update: updateForwardHtmlEvents } = forwardHtmlEvents(canvas, () => camera, scene)
5470

5571
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+
})
5678

5779
let prevTime: number | undefined
58-
renderer.setAnimationLoop((time) => {
80+
renderer.setAnimationLoop((time, frame) => {
5981
const deltaTime = prevTime == null ? 0 : time - prevTime
6082
prevTime = time
6183
updateForwardHtmlEvents()
6284
orbit.update(deltaTime)
6385
pivot.update(time, camera)
6486
transform.update(time, camera)
87+
handleStore.update(deltaTime)
88+
store.update(frame, deltaTime)
6589
renderer.render(scene, camera)
6690
})
6791

examples/handle-vanilla/package.json

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
{
22
"dependencies": {
33
"@pmndrs/pointer-events": "workspace:~",
4-
"@pmndrs/handle": "workspace:~"
4+
"@pmndrs/handle": "workspace:~",
5+
"@pmndrs/xr": "workspace:~"
56
},
67
"scripts": {
7-
"dev": "vite"
8+
"dev": "vite --host"
89
}
910
}

examples/handle-vanilla/vite.config.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
import path from 'path'
22
import { defineConfig } from 'vite'
3+
import basicSsl from '@vitejs/plugin-basic-ssl'
34

45
// https://vitejs.dev/config/
56
export default defineConfig({
7+
plugins: [basicSsl()],
68
build: {
79
outDir: './dist',
810
},
9-
base: '/pointer-events/',
11+
base: '/handle-vanilla/',
1012
resolve: {
1113
alias: [
1214
{

examples/vanilla/index.ts

+2-3
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,7 @@ import {
1010
Scene,
1111
WebGLRenderer,
1212
} from 'three'
13-
import { reversePainterSortStable, Container, Fullscreen, Image, Text, Svg, Content, Root } from '@pmndrs/uikit'
14-
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js'
13+
import { reversePainterSortStable, Container, Image, Text, Svg, Root } from '@pmndrs/uikit'
1514
import { Delete } from '@pmndrs/uikit-lucide'
1615

1716
const camera = new PerspectiveCamera(70, 1, 0.01, 100)
@@ -125,9 +124,9 @@ renderer.setAnimationLoop((time, frame) => {
125124
const delta = prevTime == null ? 0 : time - prevTime
126125
prevTime = time
127126
box.rotation.y = time * 0.0001
127+
root.update(delta / 1000)
128128
store.update(frame, delta)
129129
renderer.render(scene, camera)
130-
root.update(0.016)
131130
})
132131
renderer.localClippingEnabled = true
133132
renderer.setTransparentSort(reversePainterSortStable)

pnpm-lock.yaml

+3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)