Несколько вопросов о WebGL - PullRequest
7 голосов
/ 02 июля 2011

Я изучаю OpenGL 3.3 и работаю над небольшим игровым движком.

Но чем больше я исследую, тем больше ощущается, что автономные компьютерные игры могут однажды устареть. Все игры будут в браузере.

Я также очень заинтересован в интеграции всего в браузере, если возможно использовать ту же силу, что и любая другая не браузерная игра.

После небольшого исследования я обнаружил WebGL, который работает на Canvas в HTML 5.

Теперь есть несколько вопросов,

  1. Может ли WebGL использовать те же преимущества от ПК, что и продукт без просмотра?

  2. Он полностью основан на шейдерах? или также поддерживает устаревшую (я не знаю, если она также не рекомендуется в WebGL) рендеринг фиксированной функции? Поскольку я изучаю шейдерный подход, я действительно не хочу возвращаться к конвейеру с фиксированными функциями.

  3. Или мне нужно использовать другую оболочку (Copperlich или GLGE), чтобы получить поддержку шейдера? (хотя ни у одного из этих двигателей нет поддержки шейдеров).

  4. Является ли JavaScript единственным способом взаимодействия с WebGL? Есть ли способ написать приложение WebGL с использованием C / C ++ / Java?

  5. Можно ли интегрировать другое промежуточное ПО с WebGL? (например: bullet, phyX). Должен ли я написать какой-нибудь интерфейс, использующий JS, который соединяется с этой нативной библиотекой?

  6. Java-приложение может быть интегрировано в браузер с интерфейсом OpenGl с использованием JOGL или LWJGL. Тогда почему WebGL, когда Java может это сделать?

  7. Разве JavaScript не медленный? Это действительно хороший выбор?

  8. Можно ли запустить движок, написанный на C / C ++ с использованием OpenGL, в контексте WebGL? Это просто абстрагирование системы рендеринга или это вообще невозможно?

  9. Существует ли какая-либо возможность для Microsoft предложить WebX (DirectX) instread для реализации WebGL в IE?

  10. Я думаю, что наиболее важной частью WebGL будет интеграция по умолчанию с браузером. Таким образом, вам не нужно загружать плагин для игры, например, Unity Player для Unity3d или любой другой плагин для определенного игрового движка. Вы по-прежнему можете играть в любом недавно установленном браузере, если он поддерживает WebGL. Просто откройте страницу и начните играть. Разве это не правильно?

  11. Есть ли альтернатива WebGL, которая может обеспечить запуск "установки плагинов не требуется"?

  12. Какие проблемы со стабильностью? Поскольку игра будет работать в браузере, ее отзывчивость сыграет решающую роль в стабильности игры. Должен ли я беспокоиться об этом еще? Будет ли браузер узким местом игры?

  13. Какие (основные) функции, которые не поддерживает WebGL, поддерживаются OpenGL 3.3 или более поздней версии (я знаю, что WebGL основан на OpenGL ES 2.0). Как я уже говорил ранее, я работаю над собственным игровым движком на основе OpenGL 3.3

Скорее, да / нет, некоторые объяснения или веб-ссылки могут помочь.

Ответы [ 3 ]

8 голосов
/ 02 июля 2011

Но чем больше я исследую, тем больше ощущается, что офлайн-игры для ПК могут однажды устареть. Все игры будут в браузере.

И если это произойдет через 15 лет, WebGL или подобная технология все еще будут там. Не нужно спешить.

После небольшого исследования я обнаружил WebGL, который работает на Canvas в HTML 5.

Если, конечно, человек не использует Internet Explorer.

Ваши вопросы:

1: Что вы подразумеваете под "такими же сильными сторонами"?

2: WebGL является реализацией JavaScript OpenGL ES 2.0 . Так что да.

3: см. № 2.

4: WebGL - это JavaScript реализация OpenGL ES 2.0. Так что это только JavaScript;)

5: WebGL - это JavaScript реализация OpenGL ES 2.0. Bullet и тому подобное - скомпилированные библиотеки. Если вы не начнете пользоваться какими-либо надстройками для браузера, вы можете использовать только те библиотеки, которые поставляются вместе с браузером, и любую технологию JavaScript, которую вы хотите использовать.

Примечание. Я не уверен, что JavaScript может напрямую взаимодействовать с надстройками браузера. Если это возможно, это будет через специфичный для браузера API. Так что это может быть вообще невозможно.

6: потому что Java требует установки среды выполнения Java, которая фактически является надстройкой. JavaScript имеет более прямой доступ к браузеру. Вы можете взаимодействовать с DOM HTML, взаимодействием на стороне сервера через JSON или другими механизмами и т. П.

7: Определите «медленно». Большинство браузеров используют ту или иную форму JIT, поэтому она будет работать «достаточно быстро». Будет ли он иметь производительность, которую может иметь нативный код? Нет. Но опять же, вы делаете игру, которая будет нуждаться в такой производительности?

8: Скажите мне сейчас: WebGL - это JavaScript реализация OpenGL ES 2.0. Поэтому не нужно взаимодействовать с кодом C / C ++, который не является частью браузера;)

9: они планируют вскоре представить 3D-рендеринг с помощью Silverlight. Silverlight, конечно, является дополнением.

10: Да.

11: Нет. Ничего, даже удаленно кроссплатформенного.

12: Это зависит от браузера и драйвера. Реализации WebGL все еще молоды, поэтому им, возможно, еще придется повзрослеть.

13: Это сложный вопрос. Возможно, вы знаете об этом, но WebGL является реализацией JavaScript OpenGL ES 2.0 ;) Это означает, что он поддерживает то, что делает ES 2.0, вместе с любыми расширениями, которые предоставляет реализация. В отличие от обычных настольных или мобильных реализаций OpenGL, реализация здесь состоит из двух частей: самого браузера и аппаратного драйвера.

Реализация Google WebGL переводит вызовы OpenGL ES 2.0 в WebGL в вызовы Direct3D на настольных компьютерах с Windows. Это обеспечивает им некоторую стабильность (поскольку драйверы OpenGL, особенно на компьютерах с Linux, ненадежны). Стоимость: Google теперь решает, какие расширения поддерживать. Реализация Firefox WebGL идет прямо к настольному OpenGL или базовому OpenGL ES 2.0 для мобильных устройств. Это позволяет базовой реализации предоставлять расширения для WebGL.

Базовая версия ES 2.0, на которую все гарантии WebGL, приблизительно эквивалентна настольной версии OpenGL 2.0. Так что ничего с рабочего стола GL 3.x. Существует множество расширений OpenGL ES, которые предоставляют доступ к большему количеству функций, но их совокупность еще не дополняет функциональность уровня GL 3.x на рабочем столе.

В конечном счете, WebGL не предназначен для "хардкорных игр". Конечно, он может быть в состоянии реализовать некоторые из них, но его основная цель - разрешить рисование трехмерной графики. Быстрая скорость и физика высокого класса - это не то, о чем идет речь.

5 голосов
/ 06 мая 2016
  1. Может ли WebGL использовать ту же мощь, что и ПК, как это делает не-просматриваемый продукт?

Нет, нативные приложения имеют доступ к последней версии GPUфункции.Приложения WebGL этого не делают.

Это полностью на основе шейдеров?или также поддерживает устаревшую (я не знаю, если она также не рекомендуется в WebGL) рендеринг фиксированной функции?Поскольку я изучаю шейдерный подход, я действительно не хочу возвращаться к конвейеру с фиксированными функциями.

В WebGL нет никаких фиксированных функций.Он основан на OpenGL ES 2.0, который на 100% основан на шейдерах

Или мне нужно использовать другую оболочку (Copperlich или GLGE), чтобы получить поддержку шейдера?(хотя ни один из этих движков не поддерживает шейдеры).

Нет

Является ли JavaScript единственным способом взаимодействия с WebGL?Есть ли способ написать приложение WebGL с использованием C / C ++ / Java?

Вы можете использовать Emscripten для компиляции C / C ++ в asm.js / WebAssembly.Это то, что Unity3D и Unreal делают для поддержки игр в браузере.

Можно ли интегрировать другое промежуточное ПО с WebGL?(например: bullet, phyX).Нужно ли мне писать какой-нибудь интерфейс с использованием JS, который соединяется с этой нативной библиотекой?

Используя emscripten, да, вы можете использовать библиотеки C / C ++

Java-приложение может быть интегрировано в браузер с интерфейсом OpenGl с использованием JOGL или LWJGL.Тогда почему WebGL, когда Java может это сделать?

Java в браузере устарела.Он небезопасен как плагин и был удален из большинства браузеров.

Разве JavaScript не медленный?Действительно ли это хороший выбор?

Asm.js / WebAssembly, как было показано, примерно на 70% быстрее, чем собственный (что быстрее, чем в среднем по Java или C #). В то же времянекоторые функции браузера добавляют определенные накладные расходы, которых может не иметь нативное приложение.Например, элемент <canvas> всегда составляется вместе со страницей, что означает как минимум 1 дополнительный вызов отрисовки в полноэкранном режиме или в полноэкранном режиме.

Можно ли запустить движок, написанный на C / C ++ с использованием OpenGL, в контексте WebGL?Это просто абстрагирование системы рендеринга или это вообще невозможно?

Да, снова см. Emscripten

Есть ли какая-либо возможность для Microsoft предложить WebX (DirectX) instread для реализации WebGL в IE?

Это, безусловно, возможно.Никто не может предсказать будущее.Microsoft уже внедрила WebGL в IE11 и Edge.

Я думаю, что наиболее важной частью WebGL будет интеграция по умолчанию с браузером.Таким образом, вам не нужно загружать плагин для игры, например, Unity Player для Unity3d или любой другой плагин для определенного игрового движка.Вы по-прежнему можете играть в любом недавно установленном браузере, если он поддерживает WebGL.Просто откройте страницу и начните играть.Разве это не правильно?

Вопросы, требующие мнения, не рекомендуется использовать при переполнении стека.

Есть ли альтернатива WebGL, которая может обеспечить запуск "установка плагина не требуется"?

В настоящее время не

Какие проблемы со стабильностью?Поскольку игра будет работать в браузере, ее отзывчивость сыграет решающую роль в стабильности игры.Должен ли я беспокоиться об этом еще?Будет ли браузер узким местом игры?

Нет способа узнать это, кроме как для тестирования.Chrome и Firefox обновляются каждые 6 недель.Edge и Safari также обновляются несколько раз в год.Их поведение меняется с каждым выпуском.Обычно к лучшему.

Каковы (основные) вещи, которые WebGL не поддерживает, которые поддерживаются OpenGL 3.3 или более поздней версии (я знаю, что WebGL основан на OpenGL ES 2.0).Как я уже говорил ранее, я работаю над своим собственным игровым движком на основе OpenGL 3.3

Этот список слишком длинный для исследования.

0 голосов
/ 08 октября 2015

Скорость JavaScript сравнима с современной Java.

Плагины для браузера постепенно сокращаются. В некоторых случаях данные могут передаваться и передаваться, например, с помощью WebSockets или WebRTC.

Для таких библиотек, как Bullet, которым не нужно взаимодействовать с вещами вне браузера, есть Emscripten, который компилирует C ++ в asm.js. Можно даже скомпилировать полноценное приложение C ++ для JavaScript, фактически это то, что делают UE4 и Unity. Для больших игр / приложений с большим количеством данных я пока не рекомендую этого, поскольку в 32-битных браузерах есть ограничения памяти.

По умолчанию все основные браузеры переводят вызовы WebGL в Direct3D в Windows (включая Firefox), поэтому он достаточно стабилен.

Базовый WebGL сравним с OpenGL 2.0, но есть расширения, обеспечивающие функции WebGL 2.0 (OpenGL ES 3.x), такие как WEBGL_draw_buffers (в настоящее время с> 55% глобальной поддержки).

...