【问题标题】:How to convert OpenGL code to WebGL如何将 OpenGL 代码转换为 WebGL
【发布时间】:2015-10-12 19:39:40
【问题描述】:

我已经使用 OpenGL 完成了一个图形项目,现在我想将它转换为 WebGL,以便我可以将它放到网络上。有什么方法可以直接将 OpenGL c++ 代码转换为 WebGL,或者我必须手动重新编写? 我只学习了 WebGL 的一些基础知识,因为我也在并行学习 javascript(只是因为它是编码 webgl 所必需的)。 也欢迎任何其他建议。

【问题讨论】:

    标签: webgl


    【解决方案1】:

    我很惊讶没有人提到Emscripten。这不是一个完美的解决方案,根据您的代码结构和您使用的库,您可能需要进行一些手动调整,但它作为通用 C++ 到 Javascript 交叉编译器的效果非常好。

    我不保证它是灵丹妙药,但它可能值得一看。

    【讨论】:

    • 非常感谢.. :) 我正在尝试与 Emscripten 合作...让我们看看会发生什么。我正在使用 glut 库。
    • 你有任何关于它如何为你工作的更新吗?我正在学习一门严格意义上的 OpenGL 课程,但我希望将我的最终项目转换为基于 Web 的版本...
    • 让我添加桌面 GL 具有 an old deprecated fixed function API,如果您碰巧仍在使用它,则需要一些工作来模拟它。
    【解决方案2】:

    这是一个商业解决方案,但Mandreel 会这样做。它甚至在 WebGL 上模拟 OpenGL ES 1.1 固定功能支持。还有Emscripten,它将转换C/C++,显然有一些旧的OpenGL support

    否则,

    1. 当然,您必须将 C++ 转换为 JavaScript
    2. 如果您使用旧 OpenGL 的旧固定功能特性(glVertex、glColor 等),则必须将它们转换为使用更新的 OpenGL 4 和 OpenGL ES 2.0 可编程样式

    【讨论】:

    • 非常感谢您的帮助。我得看看我的心轴预算。但是真的很棒。
    【解决方案3】:

    除非您的应用程序是微不足道的,否则您的大部分问题都是将 C++ 代码转换为 JavaScript。 C++ 和 JavaScript 是完全不同的语言,例如一个是静态类型,另一个是动态类型。

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

    我不知道有任何工具可以为您自动化工作,如果我看到这些工具,我会非常怀疑。将一种编程语言或 API 的语义映射到另一种是一项非常困难的自动化任务。

    【讨论】:

    • kusma 和 @SpliFF 感谢您的回复。实际上我已经创建了一个建筑物的漫游,现在我想通过网络宣传它,这就是我需要 webGL 的原因。
    【解决方案4】:

    一般来说需要手动重写。通用解决方案正确解释现有代码的可能性不大。当然,您可以编写自己的转换器,因为您可以只处理自己的代码和结构。

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

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

    【讨论】:

      【解决方案5】:

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

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

      我从未使用过其中的任何一个,但读过它们,它们看起来很有趣,并试图达到您想要实现的目标,我不能说任何关于实施以及它们在“现实世界”中的工作方式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-02
        • 1970-01-01
        • 1970-01-01
        • 2012-02-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多