移动Adobe Flash AIR上的摄像机和Stage3D.AIR上的增强现实

Eug*_*ets 6 webcam mobile augmented-reality stage3d starling-framework

快速问题

如何使用Stage3D在Adobe AIR应用程序上快速显示网络摄像头?


详细的问题

关于

我的目标是创建AR(增强现实)移动应用程序的原型.我已选择Adobe Flash AIR在移动和AIR应用程序上获得良好的3D图形支持,可轻松移植到许多移动平台(iOS,Android,Blackberry Playbook).

目的

我想展示复杂的3D模型(所以我需要使用Stage3D).在Front Camera的视频下方.像往常一样AR应用.

这是一个例子

http://www.augmentedplanet.com/wp-content/uploads/2009/11/AR-Dungeons-Challenge.JPG

问题

Stage3D根本不透明所以我不能使用StageVideo快速显示Camera的内容,因为StageVideo在Stage3D下没有看到.

所以

只有我发现的决定 - 创建具有动态纹理更新的平面.

以下是webcamvideo与Starling Framework(Stage3D)集成的示例.但是对于许多普通的移动设备,我们得到如此大的纹理更新(几乎与屏幕分辨率一样大),任何应用程序都会降低到低fps甚至崩溃.我在Galaxy Note上做了什么.凭借320x200的纹理尺寸,它具有相当不错的性能,但在AR应用程序看起来很难看.

那么在AIR上创建AR的任何出色解决方案都是如此?有人有同样的挑战吗?

sta*_*ole 3

不幸的是,这个用例在 AIR 中没有得到很好的支持。您最好的选择实际上是手动上传。在 Adob​​e 论坛上为透明 Stage3D 的功能请求添加投票可能会有所帮助。

现在来解释为什么这个功能的优先级较低:如果您正在做 AR,您可能已经在视频上进行 CPU 工作了。这意味着您已经读回相机数据以便在 CPU 上进行处理或作为 Stage3D 纹理进行处理。这是最昂贵的部分,而不是将纹理上传回 Stage3D。

为了让它发挥作用,需要有很多复杂的代码路径才能完美地协同工作。在所有支持的设备上:

  • 读回低分辨率摄像头以进行 CPU 或 GPU AR 图像处理
  • 显示直通高分辨率相机图像
  • 通过混合叠加 3D

不幸的是,这非常困难。在许多移动芯片组上,视频/摄像头、CPU 和 3D 是非常独立的单元,因此很难在不停止或复制的情况下在它们之间共享数据。如果您针对特定硬件,则可以做得很好。我知道这并不能解决您的问题,但我希望它能解释为什么这个用例在 AIR 中还不能很好地工作。我认为你有这些选择:

  • 使用 AIR 和读回/上传。在某些硬件上它会非常慢,但它会可靠地工作。
  • 本土化。在最好的情况下,这将是一个巨大的胜利,但您需要大量的自定义代码并针对每个目标进行测试。
  • 在一个非常狭窄的平台上进行本地化。许多非常酷的 AR 演示都这样做。查看 GPU 供应商提供的 AR SDK。他们中的大多数人都有一个。
  • 充分利用糟糕的情况:坚持使用低分辨率和上传,但在视频上添加一些有趣的过滤器。一旦你支付了上传费用,用你的纹理做 Stage3D 的东西就非常便宜了。

我希望这个能有一点帮助。在开发 Stage3D 时,这种确切的用例时不时就会出现。我仍然认为它真的很酷!也许这篇文章解释了为什么它还没有成为列表的顶部。