15

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?

Wilt
  • 37,062
  • 11
  • 138
  • 192
Danny Fox
  • 35,333
  • 28
  • 67
  • 92

2 Answers2

45

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

WestLangley
  • 97,891
  • 9
  • 255
  • 258
26

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 );
jascha
  • 527
  • 5
  • 18
Stemkoski
  • 8,646
  • 2
  • 43
  • 60
  • ...and don't forget to run object.updateMatrixWorld(); I was scratching my head for a while before I tried that. – arpo Apr 22 '17 at 14:11
  • 1
    Tried doing that... Still get 0, 0, 0 :( – James Heald May 03 '17 at 18:32
  • I’m also totally stuck with this as well!! Spent 5 hrs trying everything here in different ways...nothing, errors, undefined...seriously frustrating!!! – Josh Bowman Jul 24 '18 at 12:57