关于WebGL的一些问题

时间:2011-07-02 07:44:14

标签: 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的自己的游戏引擎

  14. 而不是是/否,某些解释或网络参考会有所帮助。

3 个答案:

答案 0 :(得分: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的扩展。

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

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

答案 1 :(得分:5)

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

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

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

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

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

没有

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

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

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

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

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

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

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

Asm.js / WebAssembly的速度大约是原生的70%(比Java或C#的平均速度快)同时一些浏览器功能增加了一定的开销量。应用程序可能没有。例如,<canvas>元素始终与页面合成,这意味着至少有一个额外的全屏/全浏览器窗口绘制调用。

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

是的,再次看到emscripten

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

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

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

Stack Overflow不鼓励提出意见的问题。

  
      
  1. 是否有任何替代WebGL,可以提供&#34;不需要安装插件&#34;启动?
  2.   

目前不是

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

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

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

该列表太长,无法研究。

答案 2 :(得分:0)

现在,JavaScript的速度与Java相当。

浏览器插件正在逐步淘汰。对于某些事物,数据可以与例如传入和传出。 WebSockets或WebRTC。

对于像Bullet这样不需要与浏览器之外的东西进行交互的图书馆,那里有将C ++编译为asm.js的Emscripten。甚至可以将完整的C ++应用程序编译为JavaScript,实际上它是UE4和Unity所做的。对于包含大量数据的大型游戏/应用程序,我还不推荐,因为它在32位浏览器上存在内存限制。

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

基线WebGL与OpenGL 2.0相当,但有一些扩展可以带来WebGL 2.0(OpenGL ES 3.x)功能,例如WEBGL_draw_buffers(目前大约有55%的全球支持)。

相关问题