How to Rotate Objects Using Transform control in Three JS

How to Rotate Objects Using Transform  control in Three JS




nside every 3D design software, we have the tools for translating the object, meaning we have a


button for transferring the object from one point to the other. In addition to that, we have tools for


rotating the object and also scaling it. These three are the essential tools for every 3D design


application. But imagine a 3D app (software or web application) without orbit controls (having a


360-degree view or rotating around the object); this will result in an annoying user-interactive


software everyone hates at first glance. Consequently, every 3D software design app consists of


some must-have tools. These essential utilities are, transform controls, and orbit controls, and


Three.js is no exception.


In this article, we will start from a boilerplate project using the Vite plugin, and then we will


modify the script to have all sorts of controls around the object. Some keys on the keyboard will


activate the rotation, translation, and scaling tools, each separately. We will also have orbit


controls to see everything clearly from all aspects.



Getting started with the basics:




We are going to get started with the simple elements of a Three js scene including


the camera, the renderer, the scene, the object and the light source (if necessary).


Before we do that, we’d rather use the Vite plugin to be able to easily create all the


folders and file that you need to run the Three.js code. First off, create a folder in the


directory of your projects by using the following commands:

Coppied to clipboard.

mkdir TransformControls



cd TransformControls

Then, inside of the your project folder, create the necessary files and folders by


simply running the Vite plugin command:

Coppied to clipboard.

npm create vite@latest

Then enter the name of the project. You can write the name of your project as the


name. And also the package (the name is arbitrary and you can choose anything


that you want). Then select vanilla as the framework and variant. After that, enter the


following commands in the terminal:

Coppied to clipboard.

cd TransformControls



npm install

Afterwards, you can enter the javascript code that you want to write in the main.js


file. So, we will enter the base or template code for running every project with an


animating object, such as an sphere. Also do not forget to install Three.js package


library every time create a project:

Coppied to clipboard.

npm install three

The code:




Now, enter the following script in the main.js file:

import * as THREE from 'three';


import {OrbitControls} from "/node_modules/three/examples/jsm/controls/OrbitControls.js";


import {TransformControls} from "/node_modules/three/examples/jsm/controls/TransformControls.js";


import Stats from "/node_modules/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 geometry = new THREE.BoxGeometry();


const material = new THREE.MeshNormalMaterial({ transparent : true });


const cube = new THREE.Mesh(geometry, material);


scene.add(cube);


const orbitControls = new OrbitControls(camera, renderer.domElement);


const transformControls = new TransformControls(camera, renderer.domElement);


transformControls.attach(cube);


transformControls.setMode('rotate');


scene.add(transformControls);

transformControls.addEventListener('dragging-changed', function (event) {


orbitControls.enabled = !event.value;


});

window.addEventListener('keydown', function (event) {


switch (event.key) {


case 't':


transformControls.setMode('translate');


break;


case 'r':


transformControls.setMode('rotate');


break;


case 's':


transformControls.setMode('scale');


Break;


}


})

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);

function animate() {


requestAnimationFrame(animate);


render();


stats.update();


}

function render() {


renderer.render(scene, camera);


}

animate();

Now if we save the code, and enter the following command in the terminal:

Coppied to clipboard.

npm run dev

We should see the following result:











You can rotate the cube if you click on the blue, red or green rings and move them. If


you press the “t” on the keyboard, you will see:










You can move the object using the arrows given. And if you press the “s” button, you


will be able to see:









You can scale the object in all the directions. Notice that in all three states you can


move around the object and have orbit controls, Which will give you a perfect view.

Explaining the code:



The first thing we did at the beginning was to import the necessary libraries for the


orbit controls, and the transform controls in addition to other dependency libraries.


Then, we defined the scene, camera, renderer, geometry, and material just as we did


in our recent tutorials on Three JS. Afterward, we defined the transform control and


added the cube to it to be able to apply them to the object. We also defined the orbit


controls. To activate each one of the transform controls (rotation, translation, and


scaling), we added an event listener and used the switch case statement for each of


the transform controls. Moreover, we added another event listener for the orbit


controls so that the user can easily interact with the scene. In the end, we animated


the object using the animation function.

Conclusion




n this tutorial, we implemented the transform controls, including the rotation,


translation, and scaling, in addition to orbit controls which give the user the ability


to move around the object and see it from all aspects. Using such a script, you


can easily create a user-interactive 3D design application or even a game. As you


know, one of the essential tools for every 3D user-interactive app or game is orbit


controls and transform controls. Transform control lets the user rotate objects,


and move and scale them in Three JS.


We hope this tutorial has helped you solve the challenge that you have had


in Three JS. We have covered this tutorial in a video so that you can understand


this article more deeply.




Download this Article in PDF format




3d websites

Arashtad Custom Services





In Arashtad, we have gathered a professional team of developers who are working in fields such as 3D websites, 3D games, metaverses, and other types of WebGL and 3D applications as well as blockchain developemnet.




Visit Our Services

Arashtad Serivces

Drop us a message and tell us about your ideas.

Fill in the Form

Blockchain Development
https://blog.arashtad.com/3d/webgl/threejs/how-to-rotate-objects-using-transform-control-in-three-js/

Comments

Popular posts from this blog

#30 Sets in Python - Part 1 (Python Tutorials)

Best Unity Game Ideas for the Game Developers

How to Start a Blockchain Services Business?