diff --git a/package.json b/package.json
index 2f4e404c..0f064264 100644
--- a/package.json
+++ b/package.json
@@ -64,6 +64,7 @@
"dependencies": {
"@vueuse/core": "^13.8.0",
"camera-controls": "^2.9.0",
+ "maath": "^0.10.8",
"stats-gl": "^2.0.1",
"stats.js": "^0.17.0",
"three-custom-shader-material": "^5.4.0",
diff --git a/playground/vue/components.d.ts b/playground/vue/components.d.ts
index f3ca96a1..0f4aa421 100644
--- a/playground/vue/components.d.ts
+++ b/playground/vue/components.d.ts
@@ -8,13 +8,10 @@ export {}
/* prettier-ignore */
declare module 'vue' {
export interface GlobalComponents {
- AkuAku: typeof import('./src/components/gltf/BlenderCube.vue')['default']
BlenderCube: typeof import('./src/components/gltf/BlenderCube.vue')['default']
FboCube: typeof import('./src/components/FboCube.vue')['default']
- Gltf: typeof import('./src/components/gltf/index.vue')['default']
GraphPane: typeof import('./src/components/GraphPane.vue')['default']
Jeep: typeof import('./src/components/fbx/Jeep.vue')['default']
- ModelsDemo: typeof import('./src/components/ModelsDemo.vue')['default']
OverlayInfo: typeof import('./src/components/OverlayInfo.vue')['default']
RouterLink: typeof import('vue-router')['RouterLink']
RouterView: typeof import('vue-router')['RouterView']
diff --git a/playground/vue/src/pages/controls/PresentationControlsDemo.vue b/playground/vue/src/pages/controls/PresentationControlsDemo.vue
new file mode 100644
index 00000000..c9012653
--- /dev/null
+++ b/playground/vue/src/pages/controls/PresentationControlsDemo.vue
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/playground/vue/src/router/routes/controls.ts b/playground/vue/src/router/routes/controls.ts
index baec8bd0..003d2e6e 100644
--- a/playground/vue/src/router/routes/controls.ts
+++ b/playground/vue/src/router/routes/controls.ts
@@ -34,6 +34,11 @@ export const controlsRoutes = [
name: 'ScrollControls',
component: () => import('../../pages/controls/ScrollControlsDemo.vue'),
},
+ {
+ path: '/controls/presentation-controls',
+ name: 'PresentationControls',
+ component: () => import('../../pages/controls/PresentationControlsDemo.vue'),
+ },
{
path: '/controls/helper',
name: 'Helper',
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index e1664973..d260274b 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -14,6 +14,9 @@ importers:
camera-controls:
specifier: ^2.9.0
version: 2.10.1(three@0.180.0)
+ maath:
+ specifier: ^0.10.8
+ version: 0.10.8(@types/three@0.180.0)(three@0.180.0)
stats-gl:
specifier: ^2.0.1
version: 2.4.2(@types/three@0.180.0)(three@0.180.0)
@@ -3264,6 +3267,12 @@ packages:
resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==}
engines: {node: '>=12'}
+ maath@0.10.8:
+ resolution: {integrity: sha512-tRvbDF0Pgqz+9XUa4jjfgAQ8/aPKmQdWXilFu2tMy4GWj4NOsx99HlULO4IeREfbO3a0sA145DZYyvXPkybm0g==}
+ peerDependencies:
+ '@types/three': '>=0.134.0'
+ three: '>=0.134.0'
+
macos-release@3.3.0:
resolution: {integrity: sha512-tPJQ1HeyiU2vRruNGhZ+VleWuMQRro8iFtJxYgnS4NQe+EukKF6aGiIT+7flZhISAt2iaXBCfFGvAyif7/f8nQ==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -7910,6 +7919,11 @@ snapshots:
lru-cache@7.18.3: {}
+ maath@0.10.8(@types/three@0.180.0)(three@0.180.0):
+ dependencies:
+ '@types/three': 0.180.0
+ three: 0.180.0
+
macos-release@3.3.0: {}
magic-string@0.30.17:
diff --git a/src/core/controls/PresentationControls.vue b/src/core/controls/PresentationControls.vue
new file mode 100644
index 00000000..24d29b47
--- /dev/null
+++ b/src/core/controls/PresentationControls.vue
@@ -0,0 +1,362 @@
+
+
+
+
+
+
+
diff --git a/src/core/controls/index.ts b/src/core/controls/index.ts
index 07887bf4..85c9d03d 100644
--- a/src/core/controls/index.ts
+++ b/src/core/controls/index.ts
@@ -6,6 +6,7 @@ import OrbitControls from './OrbitControls.vue'
import PointerLockControls from './PointerLockControls.vue'
import ScrollControls from './ScrollControls.vue'
import TransformControls from './TransformControls.vue'
+import PresentationControls from './PresentationControls.vue'
export {
BaseCameraControls,
@@ -15,6 +16,7 @@ export {
MapControls,
OrbitControls,
PointerLockControls,
+ PresentationControls,
ScrollControls,
TransformControls,
}