首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于WebGL的几个问题

关于WebGL的几个问题
EN

Stack Overflow用户
提问于 2011-07-02 07:44:14
回答 3查看 3.4K关注 0票数 7

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

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

我也非常有兴趣整合在浏览中的所有东西,只要有可能利用任何其他非浏览器游戏的力量。

经过一些研究,我发现了WebGL,它运行在HTML5的画布上。

现在有几个问题,

  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. 是否可以在OpenGL上下文中运行使用C/C++编写的引擎?它只是抽象出渲染系统,还是根本不可能?
  9. 微软是否有可能在IE上实现WebX (DirectX)的WebGL?
  10. 我认为WebGL最重要的部分是默认与浏览器的集成。因此,您不必下载插件来玩游戏,就像Unity3d的Unity3d或特定游戏引擎的任何其他插件一样。只要支持WebGL,您仍然可以在任何新安装的浏览器上播放。打开页面开始播放。对不对?
  11. 有任何替代的WebGL,可以提供“不需要安装插件”启动?
  12. 稳定性问题是什么?因为游戏将在浏览器中运行,它的响应性将对游戏的稳定性起到至关重要的作用。我该为这事费心吗?浏览器会成为游戏的瓶颈吗?
  13. WebGL不支持的(主要)东西是OpenGL 3.3或更高版本所支持的(我知道WebGL是基于OpenGL es2.0的)。如前所述,我正在基于OpenGL 3.3开发自己的游戏引擎。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-02 08:06:18

但我越多地探索,就会觉得离线电脑游戏总有一天会变得一目了然。所有的游戏都在浏览器上。

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

经过一些研究,我发现了WebGL,它运行在HTML5的画布上。

当然,除非该人正在运行。

你的问题:

你所说的“相同的力量”是什么意思?

2: WebGL是OpenGL es2.0的一个JavaScript实现。所以是的。

3:见#2。

4: WebGL是OpenGL ES2.0的JavaScript实现。所以它只限于JavaScript ;)

5: WebGL是OpenGL es2.0的JavaScript实现。符号之类的都是编译好的库。除非您开始使用某些浏览器插件,否则您唯一可以使用的库是浏览器附带的内容以及您想要使用的任何JavaScript技术。

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

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

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

8:现在跟我说一句: WebGL是OpenGL es2.0的JavaScript实现。因此,不能与不属于浏览器的C/C++代码进行接口;)

9:他们计划在不久的将来通过Silverlight进行3D渲染。银光当然是个附加物。

10:是的。

11:没有。甚至没有任何远距离的跨平台。

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

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

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

Basees2.0是所有WebGL的保证,大致相当于桌面OpenGL 2.0。所以桌面GL3.x上没有任何东西。有许多OpenGL ES扩展提供了对更多功能的访问,但它们的总和还没有达到桌面GL3.x级别的功能。

最终,WebGL并不是指“硬核游戏”。它当然可以实现一些,但它的主要目的是允许绘制3D图形。起泡的速度和高端的物理不是它的问题。

票数 9
EN

Stack Overflow用户

发布于 2016-05-06 12:25:32

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

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

  1. 它是完全基于着色的吗?或者也支持不推荐的(我不知道它是否在WebGL中也不推荐)固定函数呈现?由于我正在学习基于着色器的方法,我真的不想回到固定的函数管道。

在WebGL中没有固定的函数。它基于OpenGL ES 2.0,它是基于100%着色器的

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

不是

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

您可以使用埃斯兰将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. 是否可以在OpenGL上下文中运行使用C/C++编写的引擎?它只是抽象出渲染系统,还是根本不可能?

是的,再看一遍

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

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

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

在堆栈溢出时,不鼓励征求意见的问题。

  1. 有任何替代的WebGL,可以提供“不需要安装插件”启动?

目前没有

  1. 稳定性问题是什么?因为游戏将在浏览器中运行,它的响应性将对游戏的稳定性起到至关重要的作用。我该为这事费心吗?浏览器会成为游戏的瓶颈吗?

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

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

这个名单太长了,无法进行研究。

票数 6
EN

Stack Overflow用户

发布于 2015-10-08 15:20:27

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

浏览器插件正在逐步淘汰。在某些情况下,数据可以与WebSockets或WebRTC进行进出交流。

对于不需要与浏览器之外的东西进行交互的库(如Bullet ),可以使用Emscripten将C++编译成asm.js。甚至可以将一个完整的C++应用程序编译成JavaScript,事实上,这就是UE4和Unity所做的。对于拥有大量数据的大型游戏/应用程序,我还不建议这样做,因为它在32位浏览器上有内存限制。

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

基线WebGL可以与OpenGL 2.0相媲美,但也有一些扩展可以带来WebGL 2.0 (OpenGL ES 3.x)特性,例如WEBGL_draw_buffers (目前全球支持度超过55%)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6555752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档