有没有人知道您可以将WebGL应用程序部署为本机iOS或Android应用程序的方式?商业中间件是可以接受的,尽管开放项目更可取。感谢。
答案 0 :(得分:23)
作为Joris答案的扩展(似乎基于work of Nathan de Vries),以下是我在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];
我created a sample application演示了在iPhone / iPad全屏UIWebView中运行的WebGL,使用WebGL暂存器站点http://glsl.heroku.com作为目标。要小心那里的一些例子甚至会使iPad 2停止运转,这可能导致硬重启。那里的表现似乎表明为什么WebGL在移动WebKit中仍处于官方不受支持的状态。
当然,正如已经说过的,这不能保证在未来的iOS版本上运行,并且会使您的应用程序从App Store中被拒绝。这对于业余爱好工作和内部测试非常有用。
在iPad 2上运行的WebGL示例:
答案 1 :(得分:6)
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];
}
(via)
这至少可以让你开始在iOS上试验WebGL。
不确定Android上的WebGL支持。 Android跟踪器中的公平recent comments on the issue表明它尚不可用。
(移动)浏览器中WebGL的一个不错的支持表:When can I use WebGL
现在最好的方法似乎是在iOS和Android的应用程序包装器中包含您自己的WebGL启用版本的WebKit。
答案 2 :(得分:1)
由于iOS版本的WebKit本身不支持WebGL,我认为您有两种选择:
通过iframe RPC左右转发对本机OpenGL的调用,自己在WebView的JavaScript上下文中实现WebGL API。不幸的是,没有一种干净的方式从iOS上的JavaScript调用(Objective-)C函数。性能可能是个问题。
AOT-在第三方运行时编译或解释JavaScript,然后从那里实现WebGL。 iOS上不允许使用JIT编译器,因此像V8这样的东西不起作用。据我所知,Appcelerator Titanium静态编译JavaScript,并且还有一个解释器。您可以使用它,但您仍需要自己实施WebGL粘合剂。
我不知道任何适用于iOS的现有WebGL桥接器,所以我认为 需要自己编写它或者让别人为你做这件事。可能无法克服的一个问题是,如果您使用除WebGL之外的任何内容来显示内容 - 例如HTML,2D< canvas>等。将WebView显示与OpenGL帧缓冲结合起来会相当棘手。
我对Android知之甚少,但考虑到规则更加轻松,可能会在那里嵌入与WebGL兼容的浏览器。
答案 3 :(得分:1)
我认为没有任何简单的转换工具。您可能必须使用WebGL代码库并在OpenGL中为两个平台重写,以创建本机应用程序。
答案 4 :(得分:1)
尚未准备就绪,但ForPlay可以通过GWT充当Android和WebGL的通用开发平台。
答案 5 :(得分:1)
将WebKit和您应用的资源(.js,纹理等)捆绑到iOS或Android应用程序听起来并不太困难。我假设由于谷歌和苹果是WebKit项目的主要贡献者,所有必需的支持(多点触控和其他东西)已经存在。
PS:许多iOS应用使用解释的Javascript或Lua。规则是为了防止您的应用程序执行第三方代码(尤其是来自互联网),而不是您在自己的应用程序中捆绑的代码。
编辑:为了澄清,我认为您需要使用webkit(从源代码构建)实现自己的Web视图,以便使用WebGL 和通过Apple的筛选过程,因为在Apple提供的Web视图中激活WebGL会使您的应用程序被拒绝。
答案 6 :(得分:0)
有几个选项可以部署本机WebGL应用程序。 EjectaGL是一个很棒的WebGL实现,但有点难以掌握(http://codehum.com/stuff/ejectagl/)。
另一个选择是Ludei最近在iOS和Android上宣布了对WebGL的支持。它更容易使用,并支持通过WebGL在2D和3D中加速HTML5画布。它还提供了一种使用IAP,广告和大量扩展程序从您的应用中获利的方法。使用CocoonJS Launcher App及其云编译器进行测试要容易得多。
www.ludei.com http://blog.ludei.com/webgl-demos-arrive-to-google-play-store/
答案 7 :(得分:-3)
试试Phonegap。它允许您使用操作系统上的标准Webkit安装来构建“本机”HTML + CSS + JS应用程序。它提供了一个javascript到本机的桥接器,允许您在纯webapps中执行不可能的操作。