You want the position of each vertex in a particular face, then? You’ll need to know whether the geometry is indexed, by checking if `geometry.index`

exists.

**indexed geometry**

```
for ( var i = 0; i < geometry.index.count; i += 3 ) {
var a = new THREE.Vector3(
geometry.attributes.position.getX( geometry.index.getX( i ) ),
geometry.attributes.position.getY( geometry.index.getX( i ) ),
geometry.attributes.position.getZ( geometry.index.getX( i ) ),
);
var b = new THREE.Vector3(
geometry.attributes.position.getX( geometry.index.getX( i + 1 ) ),
geometry.attributes.position.getY( geometry.index.getX( i + 1 ) ),
geometry.attributes.position.getZ( geometry.index.getX( i + 1 ) ),
);
var c = new THREE.Vector3(
geometry.attributes.position.getX( geometry.index.getX( i + 2 ) ),
geometry.attributes.position.getY( geometry.index.getX( i + 2 ) ),
geometry.attributes.position.getZ( geometry.index.getX( i + 2 ) ),
);
}
```

**non-indexed geometry**

```
for ( var i = 0; i < geometry.attributes.position.count; i += 3 ) {
var a = new THREE.Vector3(
geometry.attributes.position.getX( i ),
geometry.attributes.position.getY( i ),
geometry.attributes.position.getZ( i ),
);
var b = new THREE.Vector3(
geometry.attributes.position.getX( i + 1 ),
geometry.attributes.position.getY( i + 1 ),
geometry.attributes.position.getZ( i + 1 ),
);
var c = new THREE.Vector3(
geometry.attributes.position.getX( i + 2 ),
geometry.attributes.position.getY( i + 2 ),
geometry.attributes.position.getZ( i + 2 ),
);
}
```

But note that creating so many `Vector3`

objects is not very efficient either (that’s part of why Geometry is deprecated…). It would be better to reuse the same `Vector3`

objects and call `.set()`

on them, if you need to do this while rendering.

And all this is assuming you want the `Vector3`

objects at all. You can also access `geometry.attributes.position`

directly, see BufferAttribute.