关于WebGL的一些问题

Qua*_*fan 7 javascript browser opengl-es webgl

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

但我越是探索,感觉就像离线PC游戏有朝一日可能会过时.所有游戏都将在浏览器上.

只要可以利用与任何其他非浏览器游戏相同的强度,我也非常有兴趣将所有内容集成到浏览中.

经过一番研究后,我发现了WebGL,它运行在HTML 5的Canvas上.

现在有几个问题,

  1. WebGL是否可以利用与PC相同的优势,因为非浏览产品可以?

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

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

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

  5. 是否可以将其他中间件与WebGL集成?(例如:bullet,phyX).我是否必须使用连接本地自由文件的JS编写一些界面?

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

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

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

  9. 微软是否有可能想出在IE上实现WebGL的WebX(DirectX)实例?

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

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

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

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

而不是是/否,一些解释或网络参考将有所帮助.

Nic*_*las 8

但我越是探索,感觉有一天离线电脑游戏可能会变得无能为力.所有游戏都将在浏览器上.

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

经过一番研究后,我发现了WebGL,它运行在HTML 5的Canvas上.

除非该人正在运行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可以更直接地访问浏览器.您可以通过JSON或其他机制等与HTML的DOM,服务器端通信进行交互.

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的扩展.

所有WebGL保证的基础ES 2.0大致相当于桌面OpenGL 2.0.所以没有从桌面GL 3.x的 有许多OpenGL ES扩展可以访问更多功能,但是它们的总体上还没有添加到桌面GL 3.x级别的功能.

最终,WebGL不适用于"硬核游戏".它当然可以实现一些,但它的主要目的是允许绘制3D图形.炙手可热的速度和高端物理不是它的本质.

  • @iamcreasy:我甚至不确定JavaScript _can_与附加组件交互; 如果可以,它将通过浏览器特定的JavaScript API.所以我不会完全打赌这个功能.至于我的网站,请转到[我的Bitbucket帐户页面](https://bitbucket.org/alfonse)并使用发送消息功能.你需要一个Bitbucket帐户.但是,如果您知道问题,则可以使用"问题报告"功能.我更喜欢你有一个帐户,以便我们可以有一个对话框来帮助处理问题,但你可以匿名报告问题. (2认同)
  • @iamcrasy:因为HTML代表超文本标记语言.根据所有权利,我们甚至不应该在HTML中运行脚本.WebGL _is_是处理3D图形的"必要后端".此外,硬件加速3D图形比简单播放声音文件更复杂. (2认同)

gma*_*man 6

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

不可以,本机应用程序可以访问最新的GPU功能。WebGL应用程序没有。

  1. 它是完全基于着色器的吗?还是也支持不推荐使用(我不知道WebGL是否也不推荐使用)固定功能渲染?当我学习基于着色器的方法时,我真的不想回到固定功能管道。

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

  1. 还是我必须使用其他包装器(Copperlich或GLGE)来获得着色器支持?(尽管这些引擎都不支持着色器)。

没有

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

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

  1. 是否可以将其他中间件与WebGL集成?(例如:bullet,phyX)。我是否必须使用JS编写与此本地库连接的接口?

使用emscripten,可以使用C / C ++库

  1. Java应用程序可以集成到使用JOGL或LWJGL具有OpenGl接口的浏览器中。那为什么WebGL在Java可以做到的时候呢?

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

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

事实证明,Asm.js / WebAssembly的速度大约是本机的70%(这比Java或C#的平均速度快)。同时,某些浏览器功能会增加本机应用程序可能没有的某些开销。一个示例,该<canvas>元素始终与页面混合,这意味着至少要进行一次额外的全屏/全浏览器窗口绘制调用。

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

是的,再次看到脚本

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

当然有可能。没有人可以预测未来。微软已经在IE11和Edge中实现了WebGL。

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

在堆栈溢出中不鼓励提出意见的问题。

  1. WebGL是否有其他替代版本,可以提供“无需安装插件”启动功能?

不是现在

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

除了测试之外,没有其他方法可以知道这一点。Chrome和Firefox均每6周更新一次。Edge和Safari每年还会更新几次。它们的行为随每个发行版而变化。通常情况会更好。

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

该列表太长,无法研究。