Кто-нибудь знает о том, как вы можете развернуть приложение WebGL в качестве родного приложения для iOS или Android? Коммерческое промежуточное ПО приемлемо, хотя предпочтительным будет открытый проект. Спасибо.
Развертывать приложения WebGL как приложения для iOS или Android?
Ответ 1
В качестве дополнения к ответу Joris (который, как представляется, основан на работе работы Натана де Фриза), следующий код я необходимо включить WebGL в SDK iOS 5.0:
Где-то рядом с верхней частью реализации вашего контроллера:
@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];
I создал пример приложения, демонстрирующий WebGL, запущенный в полноэкранном UIWebView iPhone/iPad с использованием веб-сайта веб-сайта WebGL http://glsl.heroku.com в качестве адресата. Будьте настороженны, что некоторые из этих примеров будут измельчать даже iPad 2 до остановки, что может привести к жесткой перезагрузке. Производительность там, кажется, указывает, почему WebGL по-прежнему находится в официально неподдерживаемом состоянии в мобильном WebKit.
Конечно, как уже было сказано, это не гарантируется для работы с будущими версиями iOS, и ваше приложение будет отклонено из App Store. Это действительно полезно для хобби и внутреннего тестирования.
Пример использования WebGL на моем iPad 2:
Ответ 2
WebKit на iOS фактически поддерживает WebGL, начиная с 4.x(не уверен, какая версия .x). Он включен в веб-просмотре, используемом инфраструктурой iAd, все другие использования WebKit (Safari и UIWebView) отключены WebGL.
Можно включить WebGL с помощью частного API (это не будет проходить процесс отправки). В вашем подклассе webview:
- (void)setWebGLEnabled:(BOOL)enableWebGL {
UIWebDocumentView* webDocumentView = [self _browserView];
WebView* backingWebView = [webDocumentView webView];
[backingWebView _setWebGLEnabled:enableWebGL];
}
(через)
Это, по крайней мере, позволит вам начать экспериментировать с WebGL на iOS.
Не уверен в поддержке WebGL на Android. Невероятно последние комментарии по этой проблеме в трекер Android показывают, что он еще не доступен.
Хорошая таблица поддержки для WebGL в (мобильных) браузерах: Когда я могу использовать WebGL
Лучший способ сделать сейчас - это включить вашу собственную версию WebKit, поддерживающую WebGL, в вашу оболочку приложения для iOS и Android.
Ответ 3
Так как версия IOS версии WebKit не поддерживает WebGL изначально, я думаю, у вас есть два варианта:
-
Внедрить API WebGL в контексте JavaScript самого WebView, переадресовывая вызовы на собственный OpenGL через iframe RPC или так далее. К сожалению, нет чистого способа вызова (Objective-) C-функций из JavaScript на iOS. Производительность может быть проблемой.
-
AOT-компиляция или интерпретация JavaScript в сторонней среде исполнения, а затем реализация WebGL. JIT-компиляторы запрещены в iOS, поэтому что-то вроде V8 не будет работать. Appcelerator Titanium статически компилирует JavaScript, насколько я знаю, а также имеет интерпретатор. Вы можете использовать это, но вам все равно нужно реализовать сам склеивание WebGL.
Я не знаю никаких существующих мостов WebGL для iOS, поэтому я думаю, вам нужно будет либо написать его самостоятельно, либо заставить кого-то сделать это за вас. Одна из проблем, которые невозможно преодолеть, заключается в том, что вы используете что-либо, кроме WebGL, для отображения материала - например. HTML, 2D < холст > , и т.д. Объединение отображения WebView с фреймбуфером OpenGL будет довольно сложным.
Я мало знаю об Android, но, учитывая, что правила там более расслаблены, возможно, там будет встроен браузер, совместимый с WebGL.
Ответ 4
Я не думаю, что есть простые инструменты конвертера. Вероятно, вам придется взять свою базу данных WebGL и переписать в OpenGL для обеих платформ, чтобы создать собственные приложения.
Ответ 5
Он еще не готов, но ForPlay может выступать в качестве общей платформы разработки для Android и WebGL через GWT.
Ответ 6
Объединение WebKit и ваших ресурсов приложения (.js, текстур и т.д.) в приложение iOS или Android не звучит слишком сложно. Я предполагаю, что, поскольку Google и Apple являются основными участниками проекта WebKit, вся необходимая поддержка (для мультитач и других вещей) уже существует.
PS: многие приложения iOS используют интерпретируемый Javascript или Lua. Существуют правила, запрещающие вашему приложению выполнять сторонний код (esp из Интернета), а не код, который вы собираете в своем собственном приложении.
РЕДАКТИРОВАТЬ. Чтобы уточнить, я думаю, вам нужно будет реализовать свой собственный веб-просмотр с помощью webkit (построенный из исходного кода), чтобы использовать WebGL и передать процесс проверки Apple, как активировать WebGL в Веб-представление, предоставленное Apple, отклонит ваше приложение.
Ответ 7
Существует несколько вариантов развертывания собственного приложения WebGL. EjectaGL - отличная реализация WebGL, но немного сложнее освоить (http://codehum.com/stuff/ejectagl/).
Другим вариантом является Ludei, который недавно объявил о своей поддержке WebGL как на iOS, так и на Android. Это проще в использовании и поддерживает ускорение для холста HTML5 как в 2D, так и в 3D через WebGL. Он также обеспечивает способ монетизации вашего приложения с помощью IAP, рекламы и множества расширений. Это намного проще проверить с помощью приложения CocoonJS Launcher и их компилятора облаков.
www.ludei.com http://blog.ludei.com/webgl-demos-arrive-to-google-play-store/
Ответ 8
Попробуйте Phonegap. Он позволяет создавать "родные" приложения HTML + CSS + JS, используя стандартную установку Webkit в вашей ОС. И он предоставляет javascript-to-native мост, чтобы вы могли делать что-то невозможное в чистых webapps.