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

详细问题
关于
我的目标是创建AR(增强现实)移动应用程序的原型(prototype)。我选择Adobe Flash AIR是为了在移动和AIR应用程序上提供良好的3D图形支持,并易于移植到许多移动平台(iOS,Android,Blackberry Playbook)。
目的
我想显示复杂的3D模型(因此我需要使用Stage3D)。在前置摄像头的视频下方和往常一样,AR应用程序
这是例子
mobile - 移动Adobe Flash AIR上的摄像机和Stage3D。 AIR的增强现实-LMLPHP
(来源:augmentedplanet.com)

问题
Stage3D根本不透明,因此我无法使用StageVideo来快速显示Camera的内容,因为StageVideo在Stage3D下看不到。
所以
我发现的唯一决定是-通过动态纹理更新创建平面。
这是example of integration of webcamvideo with Starling Framework (Stage3D)。但是对于许多普通的移动设备,我们进行了如此大的纹理更新(几乎与屏幕分辨率大小一样),以至于任何应用程序都将降到低fps甚至崩溃。例如,我在Galaxy Note上所做的操作。具有320x200的纹理尺寸,具有相当不错的性能,但在AR应用程序中看起来很难看。
那么在AIR上创建AR的任何出色解决方案都可以吗?有人遇到同样的挑战吗?

最佳答案

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

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

为了使它有用,将需要许多复杂的代码路径完美地协同工作。在所有受支持的设备上:

  • 回读用于CPU或GPU AR图像处理的低分辨率相机
  • 显示直通高分辨率相机图像
  • 通过混合
  • 叠加3D

    不幸的是,这很难。在许多移动芯片组上,视频/相机,CPU和3D是非常独立的单元,因此很难在不停止或复制的情况下在它们之间共享数据。如果您针对特定硬件,则可以做得很好。我知道这不能解决您的问题,但我希望它能解释为什么此用例在AIR中无法正常工作。我认为您有以下选择:
  • 使用AIR并回读/上传。在某些硬件上,它会非常慢,但是会可靠地工作。
  • 本地化。在最佳情况下,这将是一次巨大的胜利,但是您需要为每个目标提供大量的自定义代码和测试。
  • 在一个非常狭窄的平台上本地化。许多非常酷的AR演示都可以做到这一点。查看来自GPU供应商的AR SDK。他们大多数都有一个。
  • 尽最大可能在不良情况下发挥作用:保留低分辨率并上传,但在视频上添加一些有趣的过滤器。一旦您支付了上载费用,就可以用纹理来制作Stage3D东西,这是非常便宜的。

  • 我希望这个能有一点帮助。在开发Stage3D时,有时会出现这个确切的用例。我仍然认为这真的很酷!也许这篇文章解释了为什么它从未进入榜首。

    关于mobile - 移动Adobe Flash AIR上的摄像机和Stage3D。 AIR的增强现实,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14955649/

    10-09 07:22