从全景水平可包装图像的立方体贴图

时间:2010-02-20 13:26:46

标签: opengl textures 3d

Cubemap problem http://i46.tinypic.com/59wsic.jpg

我正在尝试编写一个算法,从像上面那样的可激励的全景图像中生成“天花板”。图像1到4是立方体的墙壁的直切口,但是天花板将更复杂,因为我认为它需要从部分5a到5d合成。有人知道伪代码的解决方案吗?

我的猜测是我们需要迭代天花板瓷砖的坐标 即。

for y=0 to height
for x=0 to width
     colorofsomecoordinateonoriginalimage = some function (poloar coords?)
     set pixel(x,y) = colorofsomecoordinateonoriginalimage
next
next

2 个答案:

答案 0 :(得分:2)

仅通过从单个位置拍摄照片并缝合它们,您无法生成全景照片。好吧,你可以使用一个水平套装,但它看起来很丑陋(通常,你缝合超过4张照片以避免边缘扭曲)。 在这里,你在y方向上有更多的数据,这意味着更多的图片,以及一些奇特的投影来生成最终的图像。

如果你仔细观察全景,你会注意到该区域在阳光下的边界不是直的。这是因为您的全景图投影在圆柱体上,而不是立方体上。所以我不认为1/2/3/4看起来会直接映射到立方体。

最重要的是,你真的不能把那些8块作为固定点拍摄的8张照片(如果你需要说服力,试着自己拍8张这样的照片并尝试将它们拼接在一起。你会看到它们有多么有趣它适用于上排,即使底行很容易,但它在缝合区域看起来有多难看。)

现在,为什么你需要立方体贴图大大改变你的选择。如果您只是在寻找一个立方体贴图来进行廉价的环境贴图效果,那么最简单的方法就是找到一个任意函数来映射您想要它们的边缘,并简单地在它们之间进行线性插值。这完全是错误的预测,但应该给出一个看起来足够实现预期目标的图片。

如果您正在寻找更准确的内容,那么您需要知道投影的生成方式,以便在重新投影到多维数据集之前可以取消投影。

所有这一切,只是拍摄立方体贴图而不是处理全景图来生成它们也容易得多,但这对你来说可能是不可能的。

答案 1 :(得分:2)

嗯......我记得曾经在研究生院做过一次这样的计算机视觉课。这不是不可能,但还需要做很多工作。一种方法是降低整个产品的质量。这是最简单的起点。一旦降级得足够多(取决于拉伸边缘需要多少),就可以开始对图像应用非线性变换。这可能是最好的近似,可能是按度数切割圆柱的部分,然后应用制作平面地图时使用的一个古老的投影(如墨卡托或CADRG等)......但你必须记住插值像素,请确保至少对像素的平均值进行近似计算。这是我能想到的最好的。