如何使用Stage3D在Adobe AIR应用程序上快速显示网络摄像头?
我的目标是创建 AR(增强现实)移动应用程序的原型。我选择 Adobe Flash AIR 是为了在移动设备上提供良好的 3D 图形支持,并且 AIR 应用程序可以轻松移植到许多移动平台(iOS、Android、Blackberry Playbook)。
我想展示复杂的3D模型(所以我需要使用Stage3D)。下面是前置摄像头的视频。像平常的 AR 应用程序一样。
(来源:augmentedplanet.com)
Stage3D 根本不透明,所以我无法使用 StageVideo 来快速显示 Camera 的内容,因为 StageVideo 在 Stage3D 下看不到。
我发现的唯一决定 - 是创建具有动态纹理更新的平坦表面。
这里是 网络摄像头视频与 Starling Framework (Stage3D) 集成的示例。但对于许多普通的移动设备,我们会得到如此大的纹理更新(几乎与屏幕分辨率的大小相同),以至于任何应用程序都会下降到低 fps 甚至崩溃。例如,我在 Galaxy Note 上所做的事情。纹理尺寸为 320x200,它具有相当不错的性能,但在 AR 应用程序中看起来很难看。
那么有什么出色的解决方案可以在 AIR 上创建 AR 吗?有人遇到同样的挑战吗?
遗憾的是,AIR 并未很好地支持此用例。您最好的选择实际上是手动上传。在 Adobe 论坛上为透明 Stage3D 的功能请求添加投票可能会有所帮助。
现在解释一下为什么这个功能的优先级较低:如果您正在做 AR,您可能已经在视频上进行 CPU 工作了。这意味着您已经读回相机数据以便在 CPU 上进行处理或作为 Stage3D 纹理进行处理。这是最昂贵的部分,而不是将纹理上传回 Stage3D。
为了使其有用,需要有许多复杂的代码路径完美地协同工作。在所有支持的设备上:
不幸的是,这非常困难。在许多移动芯片组上,视频/摄像头、CPU 和 3D 是非常独立的单元,因此很难在不停止或复制的情况下在它们之间共享数据。如果您针对特定硬件,则可以做得很好。我知道这并不能解决您的问题,但我希望它能解释为什么这个用例在 AIR 中还不能很好地工作。我想你有这些选择:
我希望这会有所帮助。在开发 Stage3D 时,这种确切的用例时不时就会出现。我仍然认为它真的很酷!也许这篇文章解释了为什么它还没有成为列表的顶部。