C++:关于360全景图像和立方体6面全景图像的相互转换

之前写过一个相关的

C++:空间坐标映射到球面坐标/全景图_如何将球体坐标映射到球面uv-CSDN博客


本次内容如下:

360全景图像,比较容易理解,

C++:关于360全景图像和立方体6面全景图像的相互转换_第1张图片

立方体6面全景图像是将全景图贴在正方体的6个面,全景图像分为6块,立方体左边正面右面展开为黄色,背面顶面和底面展开为蓝色。注意:这里的正面和背面是站在立方体内部观察的。展开后的全景图都是在立方体内部看到的画面。

C++:关于360全景图像和立方体6面全景图像的相互转换_第2张图片

C++:关于360全景图像和立方体6面全景图像的相互转换_第3张图片

六个面的法向量关系 

C++:关于360全景图像和立方体6面全景图像的相互转换_第4张图片

C++:关于360全景图像和立方体6面全景图像的相互转换_第5张图片

搞明白了这个就可以建立坐标系进行计算了

C++:关于360全景图像和立方体6面全景图像的相互转换_第6张图片

 

定义一个立方体,需要知道立方体的边长,中心坐标,8个顶点坐标,6个面的法向量

再定义一个球面,球面比较简单,只需要知道球心和半径就行

将立方体中心和球心重合

之后就是两种全景图的UV坐标变换,这个变换具体做法:

从球心向外引射线,与球面和立方体面的两个交点就是相同的点,这两个点对应的像素在没有误差的情况下是同一个。这两个点在其全景图中的UV坐标就是要求的转换。


看下效果:

1、360转6面

360全景图原图

转换后的6面全景图

 

 2、6面转360

6面全景图原图

转换后的360全景图

 3、测试图

6面测试图

C++:关于360全景图像和立方体6面全景图像的相互转换_第7张图片

转换后的360图

 

你可能感兴趣的:(C++,全景图)