Can't see the controller's grip in Oculus Go

Hi, guys !

This is my first post in this forum, so I would like to say hello to everybody !

I spent two last days trying to display a custom grip in my old-good-discontinued Oculus Go based on a webxr_xr_dragging example. I can see it in the Immersive Web emulator, but not in the Oculus browser. No matter how I tried to move/rotate - it did not appears. And I should say that standart grip is not appears too, while the beam itself works, but placed too far from standart position.

Another problem is properly aligning it to the beam. Somehow I did it but precision is not good enough and I can’t find any references for calculations.


Any help please !
Thanks in advance.

You can find my test code here:
webxr_xr_dragging_custom.html (8.6 KB)

I had to do this once, and the model you supply has to be at a specific orientation/position to work.

You might want to try importing the existing model and make sure your model has identical position/scale/rotation before you export it.

Thank you for an answer, but this is exactly what I was asking about: what is the proper position for grip model :). Existing model returned by XRControllerModelFactory() is not visible, so I’ve created simple mesh with CylinderGeometry() (line:146) and playng with it, still without success.

You might want to try importing the existing model and make sure your model has identical position/scale/rotation before you export it.

These are my 2 cents for the first problem (not seeing the controllers). Only when it is solved, try to work on their alignment.

I don’t have Oculus Go, but with Oculus Quest 2 the result is this:

  • the initial code cuts the scene, so the controllers are not seen (although parts of the beams are seen)

To fix the issue in Oculus Quest, I made these changes:

  • switch the import map to Three.js r160 (as long as I do not know which release you use)
<script type="importmap">
   "imports": {
      "three": "",
      "three/addons/": ""
  • changed the near plane of OrbitControls from 1 meter to 0.01 meter:
camera = new THREE.OrthographicCamera( window.innerWidth / - 2, window.innerWidth / 2, window.innerHeight / 2, window.innerHeight / - 2, 0.01, 1000 );

The final result is that I can see the 3D model of the controller in one hand, and a red cylinder in the other hand. The red cylinder is not well aligned with the beam. This is with Quest. Most likely it should work with Go too.

Many thanks, Pavel !
After moving the camera’s near plane I can see my custom cylinder grip. As manual states:

Note: If you want to show something in the user’s hand AND offer a pointing ray at the same time, you’ll want to attached the handheld object to the group returned by .getControllerGrip() and the ray to the group returned by getController(). The idea is to have two different groups in two different coordinate spaces for the same WebXR controller.

So I’ve just pushed the grip into the controller’s group and now it’s in the same coordinate space as the beam, so aligning is trivial. Problem is solved.

1 Like