【问题标题】:Map a texture that already has perspective to a 3D object将已经具有透视的纹理映射到 3D 对象
【发布时间】:2014-05-05 07:07:54
【问题描述】:

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

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

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

我在这方面找不到任何资源,我什至不知道这种纹理叫什么。预投影纹理?透视纹理?我正在寻找这项技术的名称(如果有的话),以及一些入门提示,例如如何在 OpenGL 或 Unity 中进行,但我不依赖于特定技术。

【问题讨论】:

    标签: 3d texture-mapping


    【解决方案1】:

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

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

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

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

    无论如何,您在这里掌握的一般概念称为Homography。你处理这个问题的频率比你想象的要多;我能给你的最简单的例子是谷歌街景。

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

       

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-07
      • 2011-02-14
      • 2018-07-13
      相关资源
      最近更新 更多