Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I set Z up coordinate system in three.js?

Tags:

In three.js Y axis represent up and down and Z axis represent forward and backward. But I want Z axis to represent up and down and Y axis to forward and backward. Here is a image showing what I want:

I want to change the entire coordinate system in such a way that, if I rotate a mesh around y axis, it follows the new coordinate system not the traditional one.

Now, I have searched stack overflow and found this link:

  1. Three.JS rotate projection so that the y axis becomes the z-axis . It doesn't work.
  2. THREEJS: Matrix from Z-Up Coordinate System to Y-Up Coordinate System. This method just change the object or mesh y and z vertices but if I rotate it around y axis it rotates around the traditional y axis. I have to apply the matrix to the rotation matrix also to make it rotate like the new coordinate system.
  3. Changing a matrix from right-handed to left-handed coordinate system
  4. Reorienting axes in three.js fails when webpage is refreshed. This doesn't work also.

Is there any way I can make three.js to work like Z up coordinate system?

like image 586
Md. Mahmudur Rahman Avatar asked Jun 19 '17 12:06

Md. Mahmudur Rahman


People also ask

Can three Js be used for 2D?

Objects in three. js exist in a three-dimensional space with x, y, and z axes. Your view of those points is determined by the camera, which also exists in three-dimensional space. This allows a bunch of stuff like zooming past 3D objects, or rotating around them, that we don't need for this 2D visualization.

Where is three Js used?

Three. JS is a cross-browser JavaScript library/API which is used to create and animate 3D computer graphics to display in a web browser. It's one type of a single JavaScript file and includes features like effects, scenes, cameras, lights, sky, materials, meshes, shades, animations, and 3D objects.


2 Answers

You can set the up vector of the camera using

camera.up.set(0,0,1); 

Then, it will work like you expect.

like image 142
inet123 Avatar answered Sep 24 '22 08:09

inet123


The answer above works in simple case, but if you wish for example to use the editor, you better set before doing anything

THREE.Object3D.DefaultUp = new THREE.Vector3(0,0,1); 

So any new object will also use this convention. Using the previous answer, I struggled in the editor on on all the implications around the controls, saving the objects etc...

Please note that if you use a grid you still have to rotate it so that it covers XY plane instead of XZ

var grid = new THREE.GridHelper( 30, 30, 0x444444, 0x888888 ); grid.rotateX(Math.PI / 2);  
like image 45
Marc Nicole Avatar answered Sep 21 '22 08:09

Marc Nicole