如何将OpenGL代码转换为WebGL

16

我已经使用OpenGL完成了一个图形项目,现在我想将它转换为WebGL,以便可以在Web上展示。是否有直接将OpenGL C++代码转换为WebGL的方法,还是我必须手动重新编写代码?

我只学习了一些WebGL的基础知识,因为我同时也在学习JavaScript(因为它在编写WebGL时需要)。欢迎提出任何其他建议。

5个回答

19

我很惊讶没有人提到Emscripten。它不是一个完美的解决方案,根据你的代码结构和使用的库的不同,你可能需要进行一些手动调整,但作为一个通用的C++到Javascript的交叉编译器,它表现得相当不错。

我不能保证它是灵丹妙药,但可以考虑尝试一下。


非常感谢... :) 我正在尝试使用 Emscripten 进行工作...让我们看看会发生什么。 我正在使用 glut 库。 - Bond
2
你有没有关于这个的最新进展?我正在上一门严格的OpenGL课程,但我希望能将我的最终项目转换成基于Web的版本... - Mik Cox
让我补充一下,桌面GL有一个旧的弃用的固定功能API,如果您仍在使用它,则需要一些工作来模拟它。 - gman

5
这是一个商业解决方案,但Mandreel可以实现此功能。 它甚至在WebGL上模拟了OpenGL ES 1.1固定功能支持。 还有Emscripten,它将转换C / C ++并显然具有一些旧的OpenGL支持
否则,
  1. 你必须将C ++转换为JavaScript
  2. 如果您使用旧版OpenGL的固定功能特性(glVertex,glColor等),则必须将它们转换为使用新的可编程样式的OpenGL 4和OpenGL ES 2.0

非常感谢您的帮助。我需要查看我的预算是否足够使用Mandreel,但它确实非常棒。 - Bond

4

除非您的应用程序很简单,否则您需要将C++代码转换为JavaScript。C++和JavaScript是非常不同的语言,例如,一个是静态类型的,另一个是动态类型的。

WebGL基于OpenGL ES 2.0,它大致上是OpenGL 2.0的子集。因此,您可以编写可直接翻译的OpenGL代码,但并非所有的OpenGL代码都可以这样做。如果没有更多信息,很难知道OpenGL代码的移植有多容易。

我不知道是否有自动化工具可以帮助您完成这个工作,如果有,我会非常怀疑这些工具。将一种编程语言或API的语义映射到另一种语言是一项非常困难的任务,很难通过自动化来实现。


kusma和@SpliFF,感谢您的回复。实际上,我已经创建了一个建筑物的漫游,并且现在我想在网络上宣传它,这就是为什么我需要WebGL的原因。 - Bond

0

看起来 http://asmjs.org/ 可以作为在浏览器中运行非 JavaScript 代码的基础。

Emscriptem(已经提到)可以理解一些 C++ 编译器输出的 LLVM,但它可能也需要手动工作,就像这些事情所涉及的方式。

我从未使用过任何一个,但是了解了它们并且它们似乎很有趣并且正在尝试达成您要实现的目标。对于实现和它们在“真实世界”中的工作方式,我无法发表任何评论。


0

一般来说,需要手动重写代码。通常情况下,通用解决方案很难正确地解释现有的代码。当然,你可以编写自己的转换器,因为你只需要处理自己的代码和结构。

值得一提的是,WebGL 是 OpenGL ES 2.0 的子集,因此为桌面系统编写的代码不一定兼容。

我见过的最接近的是将 OBJ 模型转换为 WebGL 代码的代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接