web-dev-qa-db-ja.com

WebGLアプリケーションをネイティブiOSまたはAndroidアプリケーション?

WebGLアプリをネイティブiOSまたはAndroidアプリとしてデプロイできる方法を知っている人はいますか?商用ミドルウェアでもかまいませんが、オープンプロジェクトが望ましいです。ありがとうございます。

44
Cody Brocious

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];

私は サンプルアプリケーションを作成しました WebGLスクラッチパッドサイト http://glsl.heroku.com を宛先として使用して、iPhone/iPadのフルスクリーンUIWebViewで実行されているWebGLを示しています。これらの例の一部はiPad 2でさえ停止してハードリブートにつながる可能性があることに注意してください。そこでのパフォーマンスは、WebGLがモバイルWebKitでまだ公式にサポートされていない状態にある理由を示しているようです。

もちろん、すでに述べたように、これは将来のiOSバージョンでの動作が保証されておらず、アプリケーションがApp Storeから拒否されます。これは、趣味の仕事や内部テストにのみ役立ちます。

IPad 2で実行されているWebGLの例:

enter image description here

23
Brad Larson

IOS上のWebKitは、実際には4.x以降のWebGLをサポートしています(どの.xバージョンがわからないか)。これは、iAdフレームワークで使用されるWebビューで有効になっています。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の両方のアプリケーションラッパーに含めることです。

6
Joris Kluivers

簡単な変換ツールはないと思います。ネイティブアプリを作成するには、おそらくWebGLコードベースを取得し、両方のプラットフォームのOpenGLで書き直す必要があります。

1
Benjamin Mayo

まだ準備はできていませんが、ForPlayはAndroidおよびGWT経由のWebGLの共通開発プラットフォームとして機能する可能性があります。

1
Kevin

WebKitのiOSバージョンはWebGLをネイティブにサポートしていないため、2つのオプションがあると思います。

  • Iframe RPCなどを介してネイティブOpenGLへの呼び出しを転送することにより、WebViewのJavaScriptコンテキストでWebGL APIを自分で実装します。残念ながら、iOSのJavaScriptから(Objective-)C関数を呼び出すための明確な方法はありません。パフォーマンスが問題になる可能性があります。

  • サードパーティのランタイムでJavaScriptをAOTコンパイルまたは解釈してから、そこからWebGLを実装します。 iOSではJITコンパイラは許可されていないため、V8などは機能しません。 Appcelerator Titaniumは、私の知る限りJavaScriptを静的にコンパイルし、インタープリターも備えています。それを使用することもできますが、WebGLグルーを自分で実装する必要があります。

私はiOSの既存のWebGLブリッジを認識していません。そのため、私はあなたがwillを自分で作成するか、誰かにあなたに代わってもらう必要があると思います。克服できない可能性のある問題の1つは、WebGL以外のものを使用して表示する場合です。 HTML、2D <canvas>など。WebViewの表示とOpenGLフレームバッファの組み合わせは、かなり扱いにくいものになります。

私はAndroidについてはあまり知りませんが、ルールが緩和されていることを考えると、WebGL互換のブラウザーを埋め込むことが可能かもしれません。

1
pmdj

WebKitとアプリのリソース(.js、テクスチャなど)をiOSまたはAndroidアプリケーションにバンドルすることはそれほど難しいことではありません。GoogleとAppleはWebKitプロジェクトの主要な貢献者であり、必要なすべてのサポート(マルチタッチなど)はすでにそこにあります。

PS:多くのiOSアプリは、解釈されたJavaScriptまたはLuaを使用します。ルールは、独自のアプリにバンドルするコードではなく、アプリがサードパーティのコード(インターネットからのesp)を実行しないようにするためのものです。

[〜#〜] edit [〜#〜]:明確にするために、WebGLを使用するには、Webkit(ソースから構築)を使用して独自のWebビューを実装する必要があると思いますおよびアップルが提供するWebビューでWebGLをアクティブにするとアプリが拒否されるため、アップルのスクリーニングプロセスに合格します。

1
jcayzac

ネイティブWebGLアプリをデプロイできるようにするためのオプションがいくつかあります。 EjectaGLは優れたWebGL実装ですが、習得が少し難しい( http://codehum.com/stuff/ejectagl/ )。

もう1つのオプションは、最近iOSとAndroidの両方でWebGLのサポートを発表したLudeiです。使いやすく、WebGLを介して2Dと3Dの両方でHTML5キャンバスのアクセラレーションをサポートします。また、IAP、広告、および多くの拡張機能を使用してアプリを収益化する方法も提供します。 CocoonJS Launcherアプリとそのクラウドコンパイラを使用してテストする方がはるかに簡単です。

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

0