您应该首先估计设备方向。这最好使用传感器融合来实现,请参阅以下教程:http://www.thousand-thoughts.com/2012/03/android-sensor-fusion-tutorial/。方向应表示为矩阵或四元数。如果您可以选择,请首选四元数,因为算法会运行得更快。
对于应用程序的其余部分,让我们使用 3D 引擎来显示您已经拍摄的照片。您可以选择 3D 引擎,选择您最熟悉的引擎。我们将在 3D 引擎中将已拍摄的照片显示为带纹理的矩形。
首先我们必须确定这些带纹理的矩形的大小。我们必须选择显示矩形的距离:这是任意的,我们取 1 米。然后我们需要知道相机的水平和垂直视场角,这取决于设备。为了便于解释,让我们假设我们使用 60 度水平和垂直视场(方形)相机。这些照片相当于距离观察者 1m 的 1m x 1m 方格。这是简单的三角函数,希望你能形象化。如果您需要更多解释,请告诉我。
当方向角为空时,我们可以数学计算矩形的坐标。在我们之前的示例中,正方形的坐标为 (+0.5, +0.5), (+0.5, -0.5), (-0.5, -0.5), (-0.5, +0.5)。每次我们拍照时,我们都会通过方向四元数/矩阵旋转零角坐标来计算它的坐标。然后,我们可以在这些坐标处向 3D 引擎添加一个带纹理的矩形,并将照片作为纹理。
我们现在需要做的就是随着设备方向的变化更新相机的方向。这是通过 3D 引擎完成的,可能会使用与方向旋转四元数/矩阵相反的方向旋转所有已注册的对象,但这实际上取决于您的 API。如果需要,您还可以叠加当前的相机图像。
在上面的解释中,我使用了一个具有 60 度水平和垂直视野的方形相机,以帮助您直观地看到发生了什么。零角矩形坐标的数学公式是 (X, Y), (X, -Y), (-X, -Y), (-X, Y) 其中 X = sin(X_angle) 和 Y = sin( Y_角度)。
我没有包含任何代码,因为我不想偏向您的技术选择。但是通过上面的解释,你应该能够用你选择的语言和库来实现你想要的。请告诉我们进展如何。