【问题标题】:Some questions about WebGL关于WebGL的一些问题
【发布时间】:2011-09-27 04:45:43
【问题描述】:

我正在学习 OpenGL 3.3 并在我的一个小型游戏引擎上工作。

但我越探索,感觉离线 PC 游戏总有一天会过时。所有游戏都在浏览器上。

我也对在浏览器中集成所有内容非常感兴趣,只要可以利用与任何其他非浏览器游戏相同的优势。

经过一番研究,我发现了运行在 HTML 5 画布上的 WebGL。

现在有几个问题,

  1. WebGL 是否可以像非浏览产品一样利用 PC 的优势?

  2. 它完全基于着色器?或者还支持已弃用(我不知道它在WebGL中是否也已弃用)固定功能渲染?由于我正在学习基于着色器的方法,我真的不想回到固定功能管道。

  3. 或者我是否必须使用其他包装器(Copperlich 或 GLGE)来获得着色器支持? (不过,这些引擎都没有着色器支持)。

  4. JavaScript 是与 WebGL 交互的唯一方式吗?有什么方法可以使用 C/C++/Java 编写 WebGL 应用程序吗?

  5. 是否可以将其他中间件与 WebGL 集成? (例如:项目符号、phyX)。我是否必须使用与这个原生库连接的 JS 编写一些接口?

  6. Java 应用程序可以集成在浏览器中,它具有使用 JOGL 或 LWJGL 的 OpenGL 接口。那为什么是 WebGL,Java 可以做到这一点?

  7. JavaScript 不是很慢吗?真的是个不错的选择吗?

  8. 是否可以在 WebGL 上下文中运行使用 OpenGL 的 C/C++ 编写的引擎?只是抽象出渲染系统还是根本不可能?

  9. Microsoft 是否有可能提出在 IE 上实现 WebGL 的 WebX (DirectX) instread?

  10. 我认为 WebGL 最重要的部分将是与浏览器的默认集成。因此,您无需下载插件即可玩游戏,例如用于 Unity3d 的 Unity Player 或用于特定游戏引擎的任何其他插件。只要支持 WebGL,您仍然可以在任何新安装的浏览器上玩。只需打开页面并开始播放。对不对?

  11. 是否有任何替代 WebGL 的方法可以提供“无需安装插件”启动?

  12. 有哪些稳定性问题?由于游戏将在浏览器中运行,其响应能力将对游戏的稳定性起到至关重要的作用。我应该为此烦恼吗?浏览器会不会成为游戏的瓶颈?

  13. OpenGL 3.3 或更高版本支持的 WebGL 不支持的(主要)事物是什么(我知道 WebGL 基于 OpenGL ES 2.0)。正如我之前所说,我正在开发自己的基于 OpenGL 3.3 的游戏引擎

然后是/否,一些解释或网络参考会有所帮助。

【问题讨论】:

    标签: javascript browser opengl-es webgl


    【解决方案1】:

    但我越是探索,感觉离线电脑游戏总有一天会变得过时。所有游戏都在浏览器上。

    如果 15 年后发生这种情况,WebGL 或其他类似技术仍将存在。不用着急。

    经过一番研究,我发现了运行在 HTML 5 画布上的 WebGL。

    当然,除非这个人正在运行 Internet Explorer。

    您的问题:

    1:“相同的优势”是什么意思?

    2:WebGL 是 OpenGL ES 2.0 的 JavaScript 实现。所以是的。

    3:见 #2。

    4:WebGL 是 OpenGL ES 2.0 的 JavaScript 实现。所以它只是 JavaScript ;)

    5:WebGL 是 OpenGL ES 2.0 的 JavaScript 实现。 Bullet 等是已编译的库。除非您开始使用某些浏览器插件,否则您可以使用的唯一库是浏览器附带的库以及您想使用的任何 JavaScript 技术。

    注意:我不确定 JavaScript 是否可以直接与浏览器插件交互。如果可以,它将通过特定于浏览器的 API。所以这可能根本不可能。

    6:因为 Java 需要安装 Java 运行时,它实际上是一个附加组件。 JavaScript 可以更直接地访问浏览器。您可以与 HTML 的 DOM、通过 JSON 或其他机制的服务器端通信等进行交互。

    7:定义“慢”。大多数浏览器使用某种形式的 JIT,因此它会运行“相当快”。它会具有本机代码可能具有的性能吗?不是。不过话说回来,你是在制作一款需要这种性能的游戏吗?

    8:现在跟我说吧:WebGL 是 OpenGL ES 2.0 的 JavaScript 实现。所以不能与浏览器之外的 C/C++ 代码交互;)

    9:他们计划很快通过 Silverlight 公开 3D 渲染。 Silverlight 当然是一个附加组件。

    10:是的。

    11:没有。甚至没有远程跨平台。

    12:这取决于浏览器和驱动程序。 WebGL 实现还很年轻,所以它们可能还有一些成熟的工作要做。

    13:这是一个复杂的问题。您可能知道这一点,但是,WebGL 是 OpenGL ES 2.0 的 JavaScript 实现;)这意味着它支持 ES 2.0 的功能,以及实现公开的任何扩展。与常规的桌面或移动 OpenGL 实现不同,这里的实现有两部分:浏览器本身和硬件驱动程序。

    Google 的 WebGL 实现将 WebGL 的 OpenGL ES 2.0 调用转换为 Windows 桌面计算机上的 Direct3D 调用。这使它们具有一定的稳定性(因为 OpenGL 驱动程序,特别是在 Linux 机器上,是不稳定的)。代价是 Google 现在决定支持哪些扩展。 Firefox 的 WebGL 实现直接使用桌面 OpenGL 或用于移动设备的底层 OpenGL ES 2.0。这允许底层实现向 WebGL 公开扩展。

    基本的 ES 2.0 是所有 WebGL 的保证,大致相当于桌面 OpenGL 2.0。所以 nothing 来自桌面 GL 3.x。有许多 OpenGL ES 扩展提供对更多功能的访问,但它们的总和还没有达到桌面 GL 3.x 级别的功能。

    归根结底,WebGL 不适合“硬核游戏”。它当然可以实现一些,但它的主要目的是允许绘制 3D 图形。极快的速度和高端的物理性能并不是它的意义所在。

    【讨论】:

    • 早在我到达答案的结尾之前,我就知道是你。 :P 感谢您的回答。在问题 5 上还有一件事。我是否必须将浏览插件写入端口(这是正确的词吗?)浏览器上的任何本机库?另一件事是,在从您的 opengl 示例程序(来自您的站点)运行单个程序时,我遇到了一些缺少库的问题。没有联系信息或博客文章功能。那么,我该如何告知您这些问题呢?干杯!
    • @iamcreasy:我什至不确定 JavaScript 能否 与附加组件交互;如果可以,它将通过浏览器特定的 JavaScript API。所以我不会完全押注这个功能。至于我的网站,请转到my Bitbucket account page 并使用发送消息功能。为此,您将需要一个 Bitbucket 帐户。但是,如果您知道问题,您可以使用问题报告功能。我希望您有一个帐户,以便我们可以通过对话帮助解决问题,但您可以匿名报告问题。
    • 你能在 WebGL 和 silverlight 之间做一个基本的比较吗?
    • 还有一个是什么,为什么不直接使用 HTML 5 canvas 而不是使用 webgl?只用html 5来连接显卡会不会太难?
    • @iamcrasy:因为 HTML 代表超文本标记语言。无论如何,我们甚至不应该在 HTML 中运行脚本。 WebGL 处理 3D 图形的“必要的后端”。此外,硬件加速的 3D 图形比简单地播放声音文件要复杂几个数量级。
    【解决方案2】:
    1. WebGL 是否可以像非浏览产品一样利用 PC 的优势?

    不,原生应用可以使用最新的 GPU 功能。 WebGL 应用程序没有。

    1. 它完全基于着色器?或者还支持已弃用(我不知道它在WebGL中是否也已弃用)固定功能渲染?由于我正在学习基于着色器的方法,我真的不想回到固定功能管道。

    WebGL 中没有任何固定功能。它基于 100% 基于着色器的 OpenGL ES 2.0

    1. 或者我是否必须使用其他包装器(Copperlich 或 GLGE)来获得着色器支持? (不过,这些引擎都没有着色器支持)。

    没有

    1. JavaScript 是与 WebGL 交互的唯一方式吗?有没有办法使用 C/C++/Java 编写 WebGL 应用程序?

    您可以使用Emscripten 将 C/C++ 编译为 asm.js/WebAssembly。这就是 Unity3D 和 Unreal 为支持浏览器中的游戏所做的工作。

    1. 是否可以将其他中间件与 WebGL 集成? (例如:项目符号、phyX)。我是否必须使用与这个原生库连接的 JS 编写一些接口?

    使用 emscripten,是的,您可以使用 C/C++ 库

    1. Java 应用程序可以集成在浏览器中,它具有使用 JOGL 或 LWJGL 的 OpenGL 接口。那么为什么使用 WebGL,而 Java 可以做到这一点?

    Java 已在浏览器中被弃用。它作为插件不安全,已从大多数浏览器中删除。

    1. JavaScript 不是很慢吗?真的是一个不错的选择吗?

    Asm.js/WebAssembly 已被证明是原生应用程序的 70% 左右(这比 Java 或 C# 的平均速度要快)同时,一些浏览器功能会增加一定数量的开销,而原生应用程序可能没有.例如,<canvas> 元素总是与页面复合,这意味着至少有 1 个额外的全屏/全浏览器窗口绘制调用。

    1. 是否可以在 WebGL 上下文中运行使用 OpenGL 的 C/C++ 编写的引擎?只是抽象出渲染系统还是根本不可能?

    是的,再次查看 emscripten

    1. Microsoft 是否有可能提出在 IE 上实现 WebGL 的 WebX (DirectX) instread?

    这当然是可能的。没有人能预测未来。不过,微软已经在 IE11 和 Edge 中实现了 WebGL。

    1. 我认为 WebGL 最重要的部分将是与浏览器的默认集成。因此,您无需下载插件即可玩游戏,例如用于 Unity3d 的 Unity Player 或用于特定游戏引擎的任何其他插件。只要支持 WebGL,您仍然可以在任何新安装的浏览器上玩。只需打开页面并开始播放。对不对?

    不鼓励在 Stack Overflow 上提出征求意见的问题。

    1. 是否有任何替代 WebGL 的方法可以提供“无需安装插件”启动?

    目前没有

    1. 有哪些稳定性问题?由于游戏将在浏览器中运行,其响应能力将对游戏的稳定性起到至关重要的作用。我应该为此烦恼吗?浏览器会成为游戏的瓶颈吗?

    除了测试之外,没有办法知道这一点。 Chrome 和 Firefox 均每 6 周更新一次。 Edge 和 Safari 每年也会更新几次。他们的行为随着每个版本的变化而变化。通常是为了更好。

    1. OpenGL 3.3 或更高版本支持 WebGL 不支持的(主要)事物是什么(我知道 WebGL 基于 OpenGL ES 2.0)。正如我之前所说,我正在开发自己的基于 OpenGL 3.3 的游戏引擎

    该列表太长,无法研究。

    【讨论】:

      【解决方案3】:

      JavaScript 的速度可与当今的 Java 媲美。

      浏览器插件正在逐步淘汰。对于某些事情,数据可以通过例如通信进出通信。 WebSockets 或 WebRTC。

      对于像 Bullet 这样不需要与浏览器外部交互的库,Emscripten 可以将 C++ 编译为 asm.js。甚至可以将完整的 C++ 应用程序编译成 JavaScript,事实上 UE4 和 Unity 就是这样做的。对于具有大量数据的大型游戏/应用程序,我目前不建议这样做,因为它在 32 位浏览器上存在内存限制。

      默认情况下,所有主流浏览器都将 WebGL 调用转换为 Windows(包括 Firefox)上的 Direct3D,因此它相当稳定。

      Baseline WebGL 可与 OpenGL 2.0 相媲美,但有一些扩展可带来 WebGL 2.0 (OpenGL ES 3.x) 功能,例如 WEBGL_draw_buffers(目前已获得全球 55% 以上的支持)。

      【讨论】:

        猜你喜欢
        • 2018-05-24
        • 2013-07-07
        • 2013-05-10
        • 2012-03-18
        • 2023-03-09
        • 2021-07-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多