In case it matters… since it’s in my head and I’m avoiding day job work for a minute…

Off the top of my head:

```
Vector3f headLoc = ...
Quaternion headRot = ...
float convergenceDistance = ... // down the center line
float eyeOffset = ... // from the center line
float angle = FastMath.atan2(convergenceDistance, eyeOffset);
Vector3f leftLoc = headLoc.add(headRot.mult(Vector3f.UNIT_X.mult(eyeOffset));
Vector3f rightLoc = headLoc.subtract(headRot.mult(Vector3f.UNIT_X.mult(eyeOffset));
Quaternion leftEyeRot = new Quaternion().fromAngles(0, -angle, 0);
Quaternion rightEyeRot = new Quaternion().fromAngles(0, angle, 0);
Quaternion leftEyeRotWorld = headRot.mult(leftEyeRot);
Quaternion righttEyeRotWorld = headRot.mult(righttEyeRot);
```

Possibly adjust for the fact that I often get left-hand/right-hand backwards so the eye rotations and/or positions might be swapped. (Also note: technically the local rightEyeRot is also just leftEyeRot.inverse() before converting to world.)

Anyway… now this won’t be distracting my hind-brain. Probably you don’t have that starting information maybe.