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

发布于 11-15 05:22 字数 74 浏览 6 评论 0原文

有谁知道如何将 WebGL 应用程序部署为本机 iOS 或 Android 应用程序?商业中间件是可以接受的,但开放项目会更好。谢谢。

Does anyone know of a way in which you can deploy a WebGL app as a native iOS or Android app? Commercial middleware is acceptable, although an open project would be preferable. Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

瘫痪情歌2024-11-22 05:22:37

作为 Joris 答案的扩展(似乎基于 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];

创建了一个示例应用程序,演示了在 iPhone 中运行的 WebGL / iPad 全屏 UIWebView,使用 WebGL 暂存器网站 http://glsl.heroku.com 作为目标。请注意,其中一些示例甚至会使 iPad 2 停止运行,可能导致硬重启。那里的性能似乎表明了为什么 WebGL 在移动 WebKit 中仍然处于官方不支持的状态。

当然,如前所述,这并不能保证在未来的 iOS 版本上有效,并且会使您的应用程序被 App Store 拒绝。这仅对业余爱好工作和内部测试有用。

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

在此处输入图像描述

As an extension to Joris' answer (which appears to be based on the work of Nathan de Vries), the following is the code I needed to enable WebGL within the iOS 5.0 SDK:

Somewhere near the top of your view controller implementation:

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

Programmatically creating a UIWebView and enabling WebGL:

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

id webDocumentView = [webDetailView performSelector:@selector(_browserView)];
id backingWebView = [webDocumentView performSelector:@selector(webView)];
[backingWebView _setWebGLEnabled:YES];

I created a sample application that demonstrates WebGL running in a iPhone / iPad fullscreen UIWebView, using the WebGL scratchpad site http://glsl.heroku.com as a destination. Be wary that some of those examples there will grind even an iPad 2 to a halt, potentially leading to a hard reboot. The performance there seems to indicate why WebGL is still in an officially unsupported state in mobile WebKit.

Of course, as has been stated, this is not guaranteed to work on future iOS versions and will get your application rejected from the App Store. This is only really useful for hobby work and internal testing.

An example of WebGL running on my iPad 2:

enter image description here

陈甜2024-11-22 05:22:37

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 跟踪器中的最近对此问题的评论表明,尚不可用。

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

目前最好的方法似乎是将您自己的支持 WebGL 的 WebKit 版本包含在适用于 iOS 和 Android 的应用程序包装中。

WebKit on iOS actually supports WebGL, as of 4.x (not sure which .x version). It is enabled in the webview used by the iAd framework, all other uses of WebKit (Safari and UIWebView) have WebGL disabled.

It is possible to enable WebGL using private API's (this will not pass the submission process). In your webview subclass:

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

(via)

This will at least allow you to start experimenting with WebGL on iOS.

Not sure about WebGL support on Android. Fairly recent comments on the issue in the Android tracker suggest it is not available yet.

A nice support table for WebGL in (mobile) browsers: When can I use WebGL

Best way to go for now seems to be to include your own WebGL enabled version of WebKit in your application wrapper for both iOS and Android.

永不分离2024-11-22 05:22:37

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

I don't think there are any easy converter tools. You'll probably have to take your WebGL codebase and rewrite in OpenGL for both platforms, to create native apps.

韵柒2024-11-22 05:22:37

由于 WebKit 的 iOS 版本本身不支持 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等。将 WebView 显示与 OpenGL 帧缓冲区相结合将是相当棘手的。

我对 Android 不太了解,但考虑到那里的规则更宽松,也许可以在那里嵌入一个兼容 WebGL 的浏览器。

As the iOS version of WebKit doesn't support WebGL natively, I think you have two options:

  • Implement the WebGL API in the JavaScript context of a WebView yourself by forwarding calls to the native OpenGL via iframe RPC or so. There isn't a clean way of calling (Objective-)C functions from JavaScript on iOS, unfortunately. Performance could be a problem.

  • AOT-Compile or interpret the JavaScript in a third-party runtime, then implement WebGL from there. JIT compilers are disallowed on iOS, so something like V8 won't work. Appcelerator Titanium statically compiles JavaScript as far as I know, and also has an interpreter. You could use that, but you'd still need to implement the WebGL glue yourself.

I'm not aware of any existing WebGL bridges for iOS, so I think you will need to either write it yourself or get someone to do it for you. One problem that might not be possible to overcome is if you use anything other than WebGL to display stuff - e.g. HTML, 2D <canvas>, etc. Combining WebView display with an OpenGL framebuffer is going to be rather tricky.

I don't know much about Android, but considering the rules are more relaxed there, it might be possible to embed a WebGL-compatible browser there.

池予2024-11-22 05:22:37

虽然尚未准备就绪,但 ForPlay 或许可以通过 GWT 作为 Android 和 WebGL 的通用开发平台。

It's not ready yet, but ForPlay may be able to act as a common development platform for Android and WebGL via GWT.

小猫一只2024-11-22 05:22:37

将 WebKit 和应用程序的资源(.js、纹理等)捆绑到 iOS 或 Android 应用程序中听起来并不太困难。我假设由于 Google 和 Apple 是 WebKit 项目的主要贡献者,因此所有必需的支持(针对多点触控和其他内容)都已经存在。

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

编辑:澄清一下,我认为您需要使用 webkit (从源代码构建)实现自己的 Web 视图,以便使用 WebGL 通过 Apple 的筛选过程,如下所示在 Apple 提供的 Web 视图中激活 WebGL 将使您的应用程序被拒绝。

Bundling WebKit and your app's resources (.js, textures, etc) into an iOS or Android application doesn't sounds too much difficult. I'm assuming that since Google and Apple are major contributors to the WebKit project, all the required support (for multitouch and other stuff) is already there.

PS: many iOS apps use interpreted Javascript or Lua. The rules are there to prevent your app to execute 3rd party code (esp from the internet), not the code you'd bundle in your own app.

EDIT: To clarify, I think you'd need to implement your own web view using webkit (built from source) in order to use WebGL and pass Apple's screening process, as activating WebGL in the Apple-provided web view will get your app rejected.

柠檬2024-11-22 05:22:37

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

另一个选择是 Ludei,它最近宣布在 iOS 和 Android 上支持 WebGL。 It is easier to use and supports acceleration for HTML5 canvas in both 2D and 3D through WebGL. It also provides a way to monetize your app using IAPs, ads and plenty of extensions. It is much easier to test using the CocoonJS Launcher App and their cloud compiler.

路得网
http://blog.ludei.com/webgl-demos-到达 Google Play 商店/

There are a couple of options to be able to deploy a native WebGL app. EjectaGL is a great WebGL implementation but a little bit harder to master (http://codehum.com/stuff/ejectagl/).

Another option is Ludei that recently announced their support for WebGL on both iOS and Android. It is easier to use and supports acceleration for HTML5 canvas in both 2D and 3D through WebGL. It also provides a way to monetize your app using IAPs, ads and plenty of extensions. It is much easier to test using the CocoonJS Launcher App and their cloud compiler.

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

与往事干杯2024-11-22 05:22:37

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

Try Phonegap. It allows you to build "native" HTML+CSS+JS apps using the standard Webkit installation on your OS. And it provides a javascript-to-native bridge to allow you to do things not possible in pure webapps.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文