Как конвертировать OpenGL-код в WebGL

Я сделал графический проект с использованием OpenGL, и теперь я хочу преобразовать его в WebGL, чтобы я мог разместить его в Интернете. Есть ли способ напрямую преобразовать коды OpenGL С++ в WebGL или мне нужно перезаписать вручную? Я узнал только некоторые основы WebGL, поскольку я также изучаю javascript параллельно (только потому, что это требуется в кодировании webgl). И любые другие предложения также приветствуются.

Ответ 1

Я удивлен, что никто не упомянул Emscripten. Это не идеальное решение, и в зависимости от того, как структурирован ваш код и какие библиотеки вы используете, вам может потребоваться ручная настройка, но он очень хорошо работает как общий компилятор С++ для Javascript.

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

Ответ 2

Это коммерческое решение, но Mandreel сделает это. Он даже эмулирует поддержку фиксированной функции OpenGL ES 1.1 на WebGL. Там также Emscripten, который преобразует C/С++ и, по-видимому, имеет некоторые старые Поддержка OpenGL.

В противном случае

  • Вам нужно будет, конечно, преобразовать С++ в JavaScript
  • Если вы использовали старые функции фиксированной функции старого OpenGL (glVertex, glColor и т.д.), вам придется преобразовать их в использование более нового программируемого стиля OpenGL 4 и OpenGL ES 2.0

Ответ 3

Если ваше приложение тривиально, основная часть вашей проблемы будет конвертировать код С++ в JavaScript. С++ и JavaScript - совсем другие языки, например. один из которых статически типизирован, а другой - динамически типизирован.

WebGL основан на OpenGL ES 2.0, который является примерно подмножеством OpenGL 2.0. Таким образом, вы можете написать код OpenGL, который может быть переводимым, но не весь код OpenGL. Трудно понять, насколько легко переносить код OpenGL без дополнительной информации.

Мне не известны какие-либо инструменты для автоматизации работы для вас, и я бы очень скептически относился к таким инструментам, если бы увидел их. Сопоставление семантики одного языка программирования или API с другим является очень трудной задачей для автоматизации.

Ответ 4

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

Также стоит упомянуть, что WebGL является подмножеством OpenGL ES 2.0, поэтому код, написанный для настольных систем, не обязательно будет совместим.

Ближайшим, что я видел, является код для преобразования OBJ-моделей в код WebGL.

Ответ 5

Похоже, что http://asmjs.org/ может быть основой для запуска кода, отличного от javascript, в браузере.

Emscriptem (уже упоминалось), я думаю, может понять LLVM, который может быть выведен некоторыми компиляторами на С++, но, вероятно, ему также нужна ручная работа, как это происходит.

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