Hello.

I created a square using - PlaneBufferGeometry.

How can you find out the coordinates of the points of this square? For example, I want to get the coordinate of a point at the bottom left.

You can find these points in BufferGeometry.attributes (in `mesh.geometry.attributes.position.array`

to be precise.)

Points in a plane geometry (with segmentation of 1 on width and height) are set in that order:

```
[0]---[1]
| / |
[2]---[3]
```

So, if you need coordiantes of point [2], then do something like that:

```
let g = new THREE.PlaneBufferGeometry(2, 2); // segmentation 1 x 1
let m = _some_material_ ;
let o = new THREE.Mesh(g, m);
let v = new THREE.Vector3();
let pos = geometry.attributes.position;
v.fromBufferAttribute(pos, 2); // now v contains coordinates of point [2]
// and if you want that v in world coordinates
o.localToWorld(v); // now v contains coordinates in world space
```

1 Local space or world space?

2 How was the geometry was constructed?

I’m assuming local and 3JS geometry.

PlaneGeometry( W = 1, H = 1, W_Seg = 1, H_Seg = 1 );

abs [ x, y ] = [ W/2, H/2 ];

[ -1, +1 ] [ +1, +1 ]

[0,0]

[ -1, -1 ] [ +1, -1 ]

For PlaneGeometry(4,3,2,1) the xy for lower left corner is (-2, -1.5).

**Correction was made thanks to mjurczyk.**

```
abs [ x, y ] = [ W*W_Seg/2, H*H_Seg/2 ];
[...]
lower left corner is (-4, -1.5).
```

Are you sure about these calculations ? I may be wrong, but don’t segments adjust to the dimensions (ex. plane (4, 3, n, m) would have corners in (±2, ±1.5), not (±4, ±1.5)) ?

The fun comes, when applied `.rotateX[YZ]()`

, or `.translate()`

, or `.scale()`

, or all of them in different order to the geometry

You are absolutely correct. I was thinking of my own PlaneG Generator not 3JS.