Transform Controls
Video Lecture
Description
Allow you to change the transforms of an object within the scene.
You attach the controls to the object, and then add the controls to the scene, so that the interaction handles are visible.
And then you can rescale, rotate and re position the object within the scene.
Code
./src/server/server.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 | import express from "express" import path from "path" import http from "http" const port: number = 3000 class App { private server: http.Server private port: number constructor(port: number) { this.port = port const app = express() app.use(express.static(path.join(__dirname, '../client'))) app.use('/build/three.module.js', express.static(path.join(__dirname, '../../node_modules/three/build/three.module.js'))) app.use('/jsm/controls/TransformControls', express.static(path.join(__dirname, '../../node_modules/three/examples/jsm/controls/TransformControls.js'))) app.use('/jsm/libs/stats.module', express.static(path.join(__dirname, '../../node_modules/three/examples/jsm/libs/stats.module.js'))) this.server = new http.Server(app); } public Start() { this.server.listen(this.port, () => { console.log( `Server listening on port ${this.port}.` ) }) } } new App(port).Start() |
./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 | // If using Relative Import References import * as THREE from '/build/three.module.js' import { TransformControls } from '/jsm/controls/TransformControls' import Stats from '/jsm/libs/stats.module' // If using Module Specifiers //import * as THREE from 'three' //import { TransformControls } from 'three/examples/jsm/controls/TransformControls' //import Stats from 'three/examples/jsm/libs/stats.module' const scene: THREE.Scene = new THREE.Scene() const axesHelper = new THREE.AxesHelper(5) scene.add(axesHelper) const camera: THREE.PerspectiveCamera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000) const renderer: THREE.WebGLRenderer = new THREE.WebGLRenderer() renderer.setSize(window.innerWidth, window.innerHeight) document.body.appendChild(renderer.domElement) renderer.domElement.ondragstart = function (event) { event.preventDefault(); return false; } const geometry: THREE.BoxGeometry = new THREE.BoxGeometry() const material: THREE.MeshNormalMaterial = new THREE.MeshNormalMaterial() const cube: THREE.Mesh = new THREE.Mesh(geometry, material) scene.add(cube) const controls = new TransformControls(camera, renderer.domElement) controls.attach(cube); scene.add(controls); window.addEventListener('keydown', function (event) { switch (event.key) { case "g": controls.setMode("translate") break case "r": controls.setMode("rotate") break case "s": controls.setMode("scale") break } }) camera.position.z = 2 window.addEventListener('resize', onWindowResize, false) function onWindowResize() { camera.aspect = window.innerWidth / window.innerHeight camera.updateProjectionMatrix() renderer.setSize(window.innerWidth, window.innerHeight) render() } const stats = Stats() document.body.appendChild(stats.dom) var animate = function () { requestAnimationFrame(animate) render() stats.update() }; function render() { renderer.render(scene, camera) } animate(); |