Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get the absolute position of a vertex in three.js?

As far as I know var point = object.geometry.vertices[i]; will return with the relative position for the x, y and z of the point inside the geometry of the object.

How to get the absolute position, if the object was moved, rotated or scaled?

like image 378
Danny Fox Avatar asked Jul 15 '12 19:07

Danny Fox


2 Answers

First make sure the object's matrices have been updated.

object.updateMatrixWorld();

The render loop usually calls this for you.

Then, do this:

var vector = object.geometry.vertices[i].clone();

vector.applyMatrix4( object.matrixWorld );

The vector will now contain the position in world coordinates.

You might want to read some CG reference books.

  1. 3D math primer for graphics and game development / by Fletcher Dunn and Ian Parberry

  2. Essential Mathematics for Games and Interactive Applications: A Programmer’s Guide James M. Van Verth and Lars M. Bishop

three.js r69

like image 99
WestLangley Avatar answered Oct 04 '22 00:10

WestLangley


Recent versions of Three.js (v50+) provide this functionality built into the THREE.Object3D class. In particular, to get the world coordinates of a local THREE.Vector3 instance named vector, use the localToWorld method:

object.localToWorld( vector );

Similarly, there is a worldToLocal method for converting world coordinates into local coordinates, which is slightly more complicated, mathematically speaking. To translate a world vector into the objects local coordinate space:

object.worldToLocal( vector );
like image 22
Stemkoski Avatar answered Oct 04 '22 00:10

Stemkoski