将WebGL应用程序部署为本机iOS或Android应用程序?

有没有人知道你可以部署一个WebGL应用程序作为本地的iOS或Android应用程序的方式吗? 商业中间件是可以接受的,但是一个开放的项目是可取的。 谢谢。

作为Joris的回答(似乎是基于Nathan de Vries的工作 )的扩展,以下是我需要在iOS 5.0 SDK中启用WebGL的代码:

在您的视图控制器实现的顶部附近的某个地方:

@interface UIWebView() - (void)_setWebGLEnabled:(BOOL)newValue; @end 

以编程方式创build一个UIWebView并启用WebGL:

 UIWebView *webDetailView = [[UIWebView alloc] initWithFrame:mainScreenFrame]; id webDocumentView = [webDetailView performSelector:@selector(_browserView)]; id backingWebView = [webDocumentView performSelector:@selector(webView)]; [backingWebView _setWebGLEnabled:YES]; 

我创build了一个示例应用程序 ,使用WebGL暂存站点http://glsl.heroku.com作为目的地来演示WebGL在iPhone / iPad全屏UIWebView中运行。 要警惕的是,这些例子中的一些会使iPad 2停止运行,从而导致硬重启。 那里的performance似乎表明了为什么WebGL仍然处于移动WebKit的官方不受支持的状态。

当然,如上所述,这不能保证在未来的iOS版本上工作,并会从App Store中拒绝您的应用程序。 这只对业余爱好和内部testing非常有用。

在我的iPad 2上运行WebGL的示例:

在这里输入图像说明

iOS上的WebKit实际上支持WebGL,从4.x(不知道哪个.x版本)。 它在iAd框架使用的webview中启用,WebKit(Safari和UIWebView)的所有其他用途都禁用了WebGL。

可以使用私有API来启用WebGL(这不会通过提交过程)。 在你的webview子类中:

 - (void)setWebGLEnabled:(BOOL)enableWebGL { UIWebDocumentView* webDocumentView = [self _browserView]; WebView* backingWebView = [webDocumentView webView]; [backingWebView _setWebGLEnabled:enableWebGL]; } 

( 通过 )

这至less可以让你开始在iOS上尝试WebGL。

不确定Android上的WebGL支持。 Android跟踪器最近对这个问题的评论显示目前尚不可用。

(移动)浏览器中的WebGL支持表: 我什么时候可以使用WebGL

现在最好的方法似乎是在iOS和Android的应用程序包装中包含您自己的WebGL的WebKit版本。

由于iOS版的WebKit原生不支持WebGL,我认为你有两个select:

  • 在WebView的JavaScript上下文中,通过iframe RPC等方式将调用转发给本地OpenGL,从而实现WebGL API。 不幸的是,从iOS上的JavaScript调用(Objective-)C函数并不是一种干净的方式。 性能可能是一个问题。

  • AOT-在第三方运行时编译或解释JavaScript,然后从那里实现WebGL。 JIT编译器在iOS上是不允许的,所以像V8这样的东西是行不通的。 Appcelerator Titanium静态编译JavaScript,据我所知,也有一个解释器。 你可以使用它,但你仍然需要自己实现WebGL胶水。

我不知道任何现有的iOS WebGL桥梁,所以我认为你需要自己写或者让别人来为你做。 一个可能无法克服的问题是,如果使用WebGL以外的任何东西来显示东西 – 例如HTML,2D <canvas>等。将WebView显示与OpenGL帧缓冲结合起来将会非常棘手。

我对Android不太了解,但考虑到规则更加宽松,可能会在其中embedded兼容WebGL的浏览器。

我不认为有任何简单的转换工具。 你可能不得不把你的WebGL代码库和OpenGL的两个平台重写,以创build本机应用程序。

目前还没有准备好,但是ForPlay可以通过GWT充当Android和WebGL的通用开发平台。

将WebKit和您的应用程序资源(.js,纹理等)捆绑到iOS或Android应用程序听起来并不难。 我假设由于谷歌和苹果是WebKit项目的主要贡献者,所有必需的支持(对于多点触控和其他东西)已经在那里。

PS:许多iOS应用程序使用解释的JavaScript或Lua。 规则是防止你的应用程序执行第三方代码(特别是从互联网),而不是你自己的应用程序捆绑的代码。

编辑 :为了澄清,我认为你需要实现自己的Web视图使用WebKit(从源代码build立),以便使用WebGL 通过苹果的筛选过程,因为激活WebGL在苹果提供的Web视图将让你的应用程序被拒绝。

有几个选项可以部署本机WebGL应用程序。 EjectaGL是一个伟大的WebGL实现,但有点难以掌握( http://codehum.com/stuff/ejectagl/ )。

Ludei另一个select是最近宣布在iOS和Android上支持WebGL。 通过WebGL在2D和3D上使用和支持HTML5 canvas的加速更容易。 它还提供了一种使用IAP,广告和大量扩展来获利的方法。 使用CocoonJS启动器应用程序及其云编译器进行testing要容易得多。

http://www.ludei.com http://blog.ludei.com/webgl-demos-arrive-to-google-play-store/

尝试Phonegap 。 它允许您使用OS上的标准Webkit安装来构build“原生”HTML + CSS + JS应用程序。 它提供了一个JavaScript到本地的桥梁,允许你做纯粹的webapps中不可能的事情。