使用 OpenGL ES 在现实世界中绘制三角形

Draw a triangle in the real world with OpenGL ES

我是增强现实方面的新手,对 OpenGL 有一些经验。我想用 OpenGL ES 绘制诸如三角形之类的东西(Android 或 iOS,平台无关紧要)。背景需要用手机的相机拍摄。基本上结果就像 Pokemon Go,通过相机你得到了现实世界作为背景,一个 Pokemon 插入到现实世界。

那么,我应该从哪里开始呢?

一种方法。

  1. 捕获图像并加载到 2D 纹理贴图中。
  2. 用这个 2D 纹理渲染一个四边形。四边形需要离您的虚拟相机足够远,以便它形成背景(您需要启用深度测试)。四边形必须足够大以覆盖背景(这取决于与相机的距离和您的透视视野)。
  3. 现在渲染你的场景(三角形)。

下图显示了视图坐标中的物体后 xz 平面中的视锥体。 N 和 F 是到近裁剪平面和远裁剪平面的距离,θ 是垂直视野——令图像的 a = 纵横比 = w/h(应与视口的纵横比相匹配)。 H 是您要渲染的四边形的高度,Q 是从相机到四边形的距离。四边形的高度应为 H = 2*Qtan(θ/2)。四边形的宽度是 W = aH.

您希望在前景中的物体与相机的距离应介于 N 和 Q 之间。

我假设您知道如何将视图矩阵(通过 "look-at transform")设置为相机的位置,并设置投影矩阵以指定透视投影。还假设许多其他事情(比如如何加载纹理贴图,绘制带有纹理坐标的填充四边形,启用深度测试等......)。如果您需要更多详细信息,请告诉我。

如果您希望将对象嵌入场景中,则需要一些计算机视觉技术(通过立体图像对确定深度)。这是一个不平凡的问题。