# THREE.js camera aspect / FOV

**URL:** <https://forum.8thwall.com/t/three-js-camera-aspect-fov/3988>\
**Category:** Technical Support\
**Tags:** threejs, bug\
**Created:** [December 16, 2024, 1:36pm UTC](https://forum.8thwall.com/t/three-js-camera-aspect-fov/3988 "2024-12-16T13:36:29Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Arthur\_Sangouard1](https://avatars.discourse-cdn.com/v4/letter/a/90ced4/32.png) [@Arthur\_Sangouard1](https://forum.8thwall.com/u/Arthur_Sangouard1)\
**Post date:** [December 16, 2024, 1:36pm UTC](https://forum.8thwall.com/t/three-js-camera-aspect-fov/3988/1 "2024-12-16T13:36:29Z")

</div>

Using THREE.js with `XR8.Threejs.pipelineModule()` or `customThreejsPipelineModule` (from XR Web github), it’s not possible to use `camera.aspect` or `camera.fov`, as these value are never updated.  
`camera.aspect` always equals `2` and `camera.fov` always equals `60`.

Looking at the code for the three.js pipeline module’s `onUpdate()` function, it looks like 8th Wall is updating the camera projection matrix directly:

```auto
for (let i = 0; i < 16; i++) {
    camera.projectionMatrix.elements[i] = intrinsics[i];
}

```

But this doesn’t update `camera.aspect` or `camera.fov`, so any calculations relying on these are broken - they need to be calculated from the projection matrix directly.

---

<div class="post-metadata">

**Author:** ![GeorgeButler](https://sea1.discourse-cdn.com/flex019/user_avatar/forum.8thwall.com/georgebutler/32/1903_2.png) [@GeorgeButler](https://forum.8thwall.com/u/GeorgeButler)\
**Post date:** [December 16, 2024, 5:38pm UTC](https://forum.8thwall.com/t/three-js-camera-aspect-fov/3988/2 "2024-12-16T17:38:00Z")

</div>

Thanks for the heads up, I’ll forward this to our engineering team.
