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

将WebGL应用程序部署为本机iOS或Android应用程序?,android,ios,mobile,webgl,Android,Ios,Mobile,Webgl,有人知道可以将WebGL应用程序部署为本机iOS或Android应用程序的方法吗?商业中间件是可以接受的,但最好是开放项目。谢谢。试试看。它允许您在操作系统上使用标准Webkit安装构建“本机”HTML+CSS+JS应用程序。它还提供了一个javascript到本机的桥接,允许您完成纯WebApp中不可能完成的事情。由于iOS版本的WebKit本机不支持WebGL,我认为您有两种选择: 通过iframe-RPC等将调用转发到本机OpenGL,自己在WebView的JavaScript上下文中实

有人知道可以将WebGL应用程序部署为本机iOS或Android应用程序的方法吗?商业中间件是可以接受的,但最好是开放项目。谢谢。

试试看。它允许您在操作系统上使用标准Webkit安装构建“本机”HTML+CSS+JS应用程序。它还提供了一个javascript到本机的桥接,允许您完成纯WebApp中不可能完成的事情。

由于iOS版本的WebKit本机不支持WebGL,我认为您有两种选择:

  • 通过iframe-RPC等将调用转发到本机OpenGL,自己在WebView的JavaScript上下文中实现webglapi。不幸的是,在iOS上没有一种从JavaScript调用(目标-)C函数的干净方法。性能可能是个问题

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

我不知道任何现有的用于iOS的WebGL桥接器,所以我认为您需要自己编写或找人为您编写。一个可能无法克服的问题是,如果您使用WebGL以外的任何东西来显示内容,例如HTML、2D等。将WebView显示与OpenGL帧缓冲区相结合将是相当棘手的


我对Android不太了解,但考虑到那里的规则比较宽松,可能会在那里嵌入与WebGL兼容的浏览器。

我认为没有任何简单的转换工具。您可能需要使用WebGL代码库并在OpenGL中为这两种平台重写,才能创建本机应用程序。

它还没有准备好,但ForPlay可能可以通过GWT作为Android和WebGL的通用开发平台。

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

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


编辑:为了澄清这一点,我认为您需要使用webkit(源代码构建)实现您自己的web视图,以便使用WebGL并通过苹果的筛选过程,因为在苹果提供的web视图中激活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];
}
()

这至少可以让您开始在iOS上试用WebGL

不确定Android上是否支持WebGL。在Android tracker中,相当多的人认为它还不可用

(移动)浏览器中WebGL的良好支持表:


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

作为Joris答案的扩展(似乎基于),以下是我在iOS 5.0 SDK中启用WebGL所需的代码:

在视图控制器实现顶部附近的某个位置:

@interface UIWebView()
- (void)_setWebGLEnabled:(BOOL)newValue;
@end
以编程方式创建UIWebView并启用WebGL:

UIWebView *webDetailView = [[UIWebView alloc] initWithFrame:mainScreenFrame];

id webDocumentView = [webDetailView performSelector:@selector(_browserView)];
id backingWebView = [webDocumentView performSelector:@selector(webView)];
[backingWebView _setWebGLEnabled:YES];
我演示了WebGL在iPhone/iPad全屏UIWebView中运行,使用WebGL scratchpad站点作为目标。要小心的是,这些例子中的一些甚至会使iPad2停滞不前,可能导致硬重启。那里的性能似乎表明了为什么WebGL在mobile WebKit中仍然处于官方不支持的状态

当然,如前所述,这不能保证在未来的iOS版本上工作,并且会导致应用商店拒绝您的应用程序。这只对业余工作和内部测试有用

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


有几个选项可以部署本机WebGL应用程序。EjectaGL是一个很好的WebGL实现,但是有点难掌握()

另一个选择是最近宣布在iOS和Android上支持WebGL的Ludei。它更易于使用,并通过WebGL支持二维和三维HTML5画布的加速。它还提供了一种使用IAP、广告和大量扩展来赚钱的方法。使用CocoonJS Launcher应用程序及其云编译器进行测试要容易得多

www.ludei.com

Phonegap不支持WebGL,因为它使用平台的Webkit——在Maemo版本中看到有人启用了WebGL,但他们似乎没有计划切换到自己的WebGL Webkit。我想它很快就会上市!这与他的要求相反。这也是显而易见的!关键是不要使用OpenGL和WebGL,因为这样你可以同时创建网站和移动应用程序!是的,但我是说没有这样的工具可以做到这一点。您最好使用本机编码。他确实提到“中间件”是可以的。这种中间件称为PhoneGap。唯一的问题是你必须弄清楚如何使用webkit浏览器并在Android和iPhone上启用webGL。然后,您可以使用PhoneGap将所有javascript编写为您想要的本机代码,同时使用视频加速。如果我从学校有空闲时间,我会考虑这样做。是否有机会在android应用程序中嵌入chrome beta view来呈现webgl,或者至少是开放的