Как конвертировать код OpenGL в WebGL - PullRequest
10 голосов
/ 27 марта 2012

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

Ответы [ 5 ]

14 голосов
/ 27 марта 2012

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

Я не даю никаких обещаний, что это волшебная пуля, но на это стоит взглянуть.

5 голосов
/ 27 марта 2012

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

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

  1. Вам, конечно, придется конвертировать C ++ в JavaScript
  2. Если вы использовали старые функции фиксированной функции старого OpenGL (glVertex, glColor и т. Д.), Вам придется конвертировать ихиспользовать более новый программируемый стиль OpenGL 4 и OpenGL ES 2.0
3 голосов
/ 27 марта 2012

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

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

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

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

Кажется, что http://asmjs.org/ может быть основой для запуска не-JavaScript-кода в браузере.

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

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

0 голосов
/ 27 марта 2012

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

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

Самый близкий, который я видел, - это код для преобразования моделей OBJ в код WebGL.

...