我已经使用OpenGL完成了一个图形项目,现在我想将它转换为WebGL,以便我可以将它放在网上。有没有办法直接将OpenGL c ++代码转换为WebGL,或者我必须手动重写? 我只学习了一些WebGL的基础知识,因为我也在学习并行的javascript(只是因为它是编写webgl所必需的)。 还欢迎任何其他建议。
答案 0 :(得分:14)
我很惊讶没人提到Emscripten。它不是一个完美的解决方案,取决于你的代码的结构和你使用的库你可能需要做一些手动调整,但它作为一个通用的C ++到Javascript交叉编译器工作得很好。
我不承诺这是一个神奇的子弹,但它可能值得一看。
答案 1 :(得分:5)
这是商业解决方案,但Mandreel会这样做。它甚至模仿WebGL上的OpenGL ES 1.1固定功能支持。还有Emscripten将转换C / C ++并且显然有某些旧OpenGL support。
否则,
答案 2 :(得分:3)
除非您的应用程序是微不足道的,否则您的大部分问题都是将C ++代码转换为JavaScript。 C ++和JavaScript是完全不同的语言,例如一个是静态类型,另一个是动态类型。
WebGL基于OpenGL ES 2.0,它大致是OpenGL 2.0的一个子集。因此,您可以编写可直接翻译的OpenGL代码,但并非所有OpenGL代码都可以编写。如果没有更多信息,很难知道OpenGL代码的移植是多么容易。
我不知道有任何自动化工作的工具,如果我看到这些工具,我会对这些工具持怀疑态度。将一种编程语言或API的语义映射到另一种编程语言或API是一项非常困难的自动化任务。
答案 3 :(得分:0)
一般来说,需要手动重写。通用解决方案没有太多机会正确解释现有代码。当然,您可以编写自己的转换器,因为您只需要处理自己的代码和结构。
值得一提的是,WebGL是OpenGL ES 2.0的一个子集,因此为桌面系统编写的代码无论如何都不一定兼容。
我见过的最接近的代码是将OBJ模型转换为WebGL代码。
答案 4 :(得分:0)
似乎http://asmjs.org/可以作为在浏览器中运行非JavaScript代码的基础。
我认为,Emscriptem(已经提到过)可以理解一些C ++编译器可以输出的LLVM,但它可能也需要手动工作,就像这些事情一样。我从来没有使用过任何这些但是阅读它们并且它们看起来很有趣并且试图达到你想要实现的目标,我不能说实现它们如何在“现实世界”中工作。