我想将一个二维鱼眼图像展开成一个三维立方体。因此,我认为有必要将鱼眼图像展开成六个立方体图像,并将这六个立方体图像重新映射到三维立方体上。现在,我对第一步感到困惑,无法在互联网上找到一些具体的论文和代码实现,希望有人能给我一些想法。
我能得到的结果如下:
立方体图像
鱼眼图像
![cubic image](https://istack.dev59.com/8iB42.webp)
![enter image description here](https://istack.dev59.com/6o1qq.webp)
无法将任意鱼眼图像展开为立方体贴图。但是,如果您说的是球形环境贴图(SEM),而不是鱼眼图像,则可以在一定程度上完成。
一段时间以前,我成功编写了一款软件,可以将SEM贴图转换为立方体贴图,反之亦然。因此,我可以证明这是可能的。但需要注意的是,在靠近SEM边缘的区域会出现大量扭曲,这些区域被映射到立方体贴图背面中心处。请阅读文章,您将在其中找到实现所需的所有信息。
第9页有一个将方向向量映射到SEM UV坐标的函数。在第21页,您将找到类似的函数,但用于立方体贴图。因此,您的策略应该是为立方体贴图的每个纹素找到一个方向向量,然后为该方向向量计算SEM坐标并从SEM贴图中采样一个纹素。
顺便说一句,我从你评论中添加的链接里注意到你在谈论半球环境贴图。所有的逻辑都是一样的,只是从三维方向向量到SEM坐标的映射不同。很容易可以修改第9页的公式以适应半球形式。但你需要知道,对于半球形式的SEM,你会得到一个半立方体贴图,也就是没有后面和被剪裁了的侧面。