将已具有透视的纹理映射到3D对象

时间:2014-05-04 20:30:48

标签: 3d texture-mapping

通常,纹理就像从自上而下的角度拍摄的照片。拍摄纹理图像的理论相机指向下方并垂直于平面。然后将此纹理映射或投影到任意对象上。

如果我从一个已经拍摄过的照片开始,并将其用作纹理怎么办?想象一下,我站在外面,将相机略微向下指向,我拍了一张照片的草。现在,我的程序中有一个2D平面,想在平面上使用草纹。如果我程序中的相机具有相同的位置。这架飞机就像我真正的相机一样。草,然后照片中的像素直接1:1映射到屏幕,当然。但是我希望能够将虚拟摄像机移动一下。

由于草的照片是以一定角度(而不是从上方)拍摄的,因此底部(朝向观察者)比在顶部(远离观察者)具有更多细节。我可以将它转换为“常规”纹理(方形,从上面拍摄),但我会失去它有更多细节的好处。

我找不到任何资源,我甚至不知道这种纹理是什么。预投影纹理?透视纹理?我正在寻找这种技术的名称,如果它有一个,并有一些提示开始,如在OpenGL或Unity中如何做,但我没有绑定到特定的技术。

1 个答案:

答案 0 :(得分:0)

您所描述的丢失细节的问题是计算机图形和信号处理的基础。

通过对在一定时间内(曝光)击中光传感器的所有光子进行采样来构建您的图像。最初,这些光子在不同时间从3D空间的不同位置到达,但是当您在一段时间内在单个2D平面上对它们进行采样时, 已经 丢失了很多信息(2个维度)。

现在,您可以扭曲图像以改变透视,但会在新信号(图像)中产生不均匀的采样率分布。翘曲信号的采样频率将高于某些地方所需的采样频率,而其他地方采样频率较低,因此会产生过采样/欠采样。过采样通常不是一个大问题。另一方面,欠采样可能导致另一次重大信息丢失。这种情况通常简称为别名。

在这种情况下,由于您无法从新视角重新生成图像,因此最简单的解决方案是插值。一种方法将涉及分析您正在重建的图像的角度,并选择合理形状的额外像素横截面进行采样和平均(各向异性过滤就是这样)。像这样的过滤是一种有根据的猜测,它试图通过假设不在原始图像中的样本点遵循给定足够相邻样本的可辨别模式来理解缺失信息。你永远不会弥补丢失的信息,只需掩盖它。

无论如何,您在此处掌握的一般概念称为Homography。你比你想象的更频繁地处理这件事;我能给你的最简单的例子是谷歌街景。

要获得更好的视觉概览,请查看the article this diagram is from

Example of plane-to-plane homography