Search code examples
imageimage-processinggeometryprojectionpanoramas

Convert Cubemap coordinates to equivalents in Equirectangular


I have a set of coordinates of a 6-image Cubemap (Front, Back, Left, Right, Top, Bottom) as follows:

[ [160, 314], Front; [253, 231], Front; [345, 273], Left; [347, 92], Bottom; ... ] 

Each image is 500x500p, being [0, 0] the top-left corner. I want to convert these coordinates to their equivalents in equirectangular, for a 2500x1250p image. The layout is like this:

cubemap

I don't need to convert the whole image, just the set of coordinates. Is there any straight-forward conversion por a specific pixel?


Solution

    1. convert your image+2D coordinates to 3D normalized vector

      the point (0,0,0) is the center of your cube map to make this work as intended. So basically you need to add the U,V direction vectors scaled to your coordinates to 3D position of texture point (0,0). The direction vectors are just unit vectors where each axis has 3 options {-1, 0 , +1} and only one axis coordinate is non zero for each vector. Each side of cube map has one combination ... Which one depends on your conventions which we do not know as you did not share any specifics.

    2. use Cartesian to spherical coordinate system transformation

      you do not need the radius just the two angles ...

    3. convert the spherical angles to your 2D texture coordinates

      This step depends on your 2D texture geometry. The simplest is rectangular texture (I think that is what you mean by equirectangular) but there are other mappings out there with specific features and each require different conversion. Here few examples:

      For the rectangle texture you just scale the spherical angles into texture resolution size...

      U = lon * Usize/(2*Pi)
      V = (lat+(Pi/2)) * Vsize/Pi
      

      plus/minus some orientation signs to match your coordinate systems.

    btw. just found this (possibly duplicate QA):