I am going to buy following diagonal (“full-frame”) fisheye lens for my camera to produce online
panoramas, but I wonder how to make the correct texture projection to the hemy-sphere, taking into account unusual lens projection ?
As far as I can recall, I am not aware of any demo in three.js that projects an image with circular fisheye projection onto a hemisphere, although it should not be difficult to adjust any of the following attempts and examples:
This thread discusses the implementation of the official ‘dual-fisheye’ example (now defunct), based on the individual projection of two 180° fisheyes onto 2 hemispheres, which are then combined in the final step. Although it is no longer available, it is a good starting point.
This small add-on that projects a single circular fisheye image (180) in real time to perspective or equirectangular. From there, you could use the official example that projects equirectangular images onto a complete sphere, on which you could adjust the geometry.
If you are more inclined towards glsl, you could try adapting one of the examples in shadertoy that implement circular fisheye conversion to a (hemi)sphere in the shader space.
And if you prefer to do the same thing, but in a pre-calculated way, Paul Burke has some good blog posts explaining the conversion from circular fisheye (180) to spherical projection and vice versa.
In any case, bear in mind that all of this is based on circular fisheye projections, not diagonal ones, and that both projections generate very different images (yellow and orange frames respectively in the following image).
I don’t know the specifications of 7artisans, but if you want to obtain complete panoramas, you will have to go through a multiple capture process, with a tripod and nodal panoramic head accessory, so a stitching step is unavoidable.
Many thanks for such detailed suggestions. I am following Paul Bourke’s works and have seen papers related to projections transformations. Moreover we are in contact, as I wrote a 3D models viewer by his request (of course with Three.js :)). Exploring all possible solutions I ended up on a simple cylindrical panorama - for my photo-project it should be enough.