Trackball Controls
Video Lecture
Your browser does not support the video tag.
Description
TrackballControls is similar to the OrbitControls . However, it does not maintain a constant camera up vector. That means that the camera can orbit past its polar extremes. It won't flip to stay the right side up.
Lesson Script
./src/client/client.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72 import * as THREE from 'three'
import { TrackballControls } from 'three/examples/jsm/controls/TrackballControls'
import Stats from 'three/examples/jsm/libs/stats.module'
const scene = new THREE . Scene ()
scene . add ( new THREE . AxesHelper ( 5 ))
const camera = new THREE . PerspectiveCamera (
75 ,
window . innerWidth / window . innerHeight ,
0.1 ,
1000
)
camera . position . z = 2
const renderer = new THREE . WebGLRenderer ()
renderer . setSize ( window . innerWidth , window . innerHeight )
document . body . appendChild ( renderer . domElement )
const controls = new TrackballControls ( camera , renderer . domElement )
// controls.addEventListener('change', () => console.log("Controls Change"))
// controls.addEventListener('start', () => console.log("Controls Start Event"))
// controls.addEventListener('end', () => console.log("Controls End Event"))
// controls.enabled = false
// controls.rotateSpeed = 1.0
// controls.zoomSpeed = 1.2
// controls.panSpeed = 0.8
// controls.keys = ['KeyA', 'KeyS', 'KeyD']
// controls.noPan = true //default false
// controls.noRotate = true //default false
// controls.noZoom = true //default false
// controls.staticMoving = true //default false
// controls.dynamicDampingFactor = 0.1
// controls.maxDistance = 4
// controls.minDistance = 2
const geometry = new THREE . BoxGeometry ()
const material = new THREE . MeshBasicMaterial ({
color : 0x00ff00 ,
wireframe : true ,
})
const cube = new THREE . Mesh ( geometry , material )
scene . add ( cube )
window . addEventListener ( 'resize' , onWindowResize , false )
function onWindowResize () {
camera . aspect = window . innerWidth / window . innerHeight
camera . updateProjectionMatrix ()
renderer . setSize ( window . innerWidth , window . innerHeight )
render ()
}
const stats = new Stats ()
document . body . appendChild ( stats . dom )
function animate () {
requestAnimationFrame ( animate )
// trackball controls needs to be updated in the animation loop before it will work
controls . update ()
render ()
stats . update ()
}
function render () {
renderer . render ( scene , camera )
}
animate ()
Useful Links
TrackballControls (Official Documentation)
KeyboardEvent.code
Retro Arcade Trackball Control
Expert Mouse Trackball Control