【发布时间】:2015-10-12 19:39:40
【问题描述】:
我已经使用 OpenGL 完成了一个图形项目,现在我想将它转换为 WebGL,以便我可以将它放到网络上。有什么方法可以直接将 OpenGL c++ 代码转换为 WebGL,或者我必须手动重新编写? 我只学习了 WebGL 的一些基础知识,因为我也在并行学习 javascript(只是因为它是编码 webgl 所必需的)。 也欢迎任何其他建议。
【问题讨论】:
标签: webgl
我已经使用 OpenGL 完成了一个图形项目,现在我想将它转换为 WebGL,以便我可以将它放到网络上。有什么方法可以直接将 OpenGL c++ 代码转换为 WebGL,或者我必须手动重新编写? 我只学习了 WebGL 的一些基础知识,因为我也在并行学习 javascript(只是因为它是编码 webgl 所必需的)。 也欢迎任何其他建议。
【问题讨论】:
标签: webgl
我很惊讶没有人提到Emscripten。这不是一个完美的解决方案,根据您的代码结构和您使用的库,您可能需要进行一些手动调整,但它作为通用 C++ 到 Javascript 交叉编译器的效果非常好。
我不保证它是灵丹妙药,但它可能值得一看。
【讨论】:
这是一个商业解决方案,但Mandreel 会这样做。它甚至在 WebGL 上模拟 OpenGL ES 1.1 固定功能支持。还有Emscripten,它将转换C/C++,显然有一些旧的OpenGL support。
否则,
【讨论】:
除非您的应用程序是微不足道的,否则您的大部分问题都是将 C++ 代码转换为 JavaScript。 C++ 和 JavaScript 是完全不同的语言,例如一个是静态类型,另一个是动态类型。
WebGL 基于 OpenGL ES 2.0,它大致是 OpenGL 2.0 的一个子集。因此,您可以编写可直接翻译的 OpenGL 代码,但并非所有 OpenGL 代码都可以。如果没有更多信息,很难知道 OpenGL 代码的移植有多容易。
我不知道有任何工具可以为您自动化工作,如果我看到这些工具,我会非常怀疑。将一种编程语言或 API 的语义映射到另一种是一项非常困难的自动化任务。
【讨论】:
一般来说需要手动重写。通用解决方案正确解释现有代码的可能性不大。当然,您可以编写自己的转换器,因为您可以只处理自己的代码和结构。
还值得一提的是,WebGL 是 OpenGL ES 2.0 的子集,因此为桌面系统编写的代码不一定兼容。
我见过的最接近的是将 OBJ 模型转换为 WebGL 代码的代码。
【讨论】:
看来http://asmjs.org/可以作为在浏览器中运行非javascript代码的基础。
Emscriptem(已经提到过),我认为,可以理解一些 C++ 编译器可以输出的 LLVM,但它可能也需要手动工作,这些事情的方式。
我从未使用过其中的任何一个,但读过它们,它们看起来很有趣,并试图达到您想要实现的目标,我不能说任何关于实施以及它们在“现实世界”中的工作方式。
【讨论】: