我已经使用OpenGL完成了一个图形项目,现在我想将它转换为WebGL,以便可以在Web上展示。是否有直接将OpenGL C++代码转换为WebGL的方法,还是我必须手动重新编写代码?
我只学习了一些WebGL的基础知识,因为我同时也在学习JavaScript(因为它在编写WebGL时需要)。欢迎提出任何其他建议。
我已经使用OpenGL完成了一个图形项目,现在我想将它转换为WebGL,以便可以在Web上展示。是否有直接将OpenGL C++代码转换为WebGL的方法,还是我必须手动重新编写代码?
我只学习了一些WebGL的基础知识,因为我同时也在学习JavaScript(因为它在编写WebGL时需要)。欢迎提出任何其他建议。
我很惊讶没有人提到Emscripten。它不是一个完美的解决方案,根据你的代码结构和使用的库的不同,你可能需要进行一些手动调整,但作为一个通用的C++到Javascript的交叉编译器,它表现得相当不错。
我不能保证它是灵丹妙药,但可以考虑尝试一下。
除非您的应用程序很简单,否则您需要将C++代码转换为JavaScript。C++和JavaScript是非常不同的语言,例如,一个是静态类型的,另一个是动态类型的。
WebGL基于OpenGL ES 2.0,它大致上是OpenGL 2.0的子集。因此,您可以编写可直接翻译的OpenGL代码,但并非所有的OpenGL代码都可以这样做。如果没有更多信息,很难知道OpenGL代码的移植有多容易。
我不知道是否有自动化工具可以帮助您完成这个工作,如果有,我会非常怀疑这些工具。将一种编程语言或API的语义映射到另一种语言是一项非常困难的任务,很难通过自动化来实现。
看起来 http://asmjs.org/ 可以作为在浏览器中运行非 JavaScript 代码的基础。
Emscriptem(已经提到)可以理解一些 C++ 编译器输出的 LLVM,但它可能也需要手动工作,就像这些事情所涉及的方式。
我从未使用过任何一个,但是了解了它们并且它们似乎很有趣并且正在尝试达成您要实现的目标。对于实现和它们在“真实世界”中的工作方式,我无法发表任何评论。
一般来说,需要手动重写代码。通常情况下,通用解决方案很难正确地解释现有的代码。当然,你可以编写自己的转换器,因为你只需要处理自己的代码和结构。
值得一提的是,WebGL 是 OpenGL ES 2.0 的子集,因此为桌面系统编写的代码不一定兼容。
我见过的最接近的是将 OBJ 模型转换为 WebGL 代码的代码。