OpenGL 或 OpenGL ES

10

我应该学习哪个版本?OpenGL 4.1还是OpenGL ES 2.0?

我将使用Qt开发桌面应用程序,但可能在几个月内开始开发移动应用程序。我对3D、3D数学等一无所知,我宁愿花100美元购买一本好书,也不想在网站上挖掘和试错一周。

我认为OpenGL 4.1的一个问题是据我所知还没有相关的书籍(最新的书是OpenGL 3.3或4.0),而OpenGL ES 2.0已有相关书籍可供参考。

另一方面,从我的角度来看,OpenGL 4.1似乎是OpenGL ES 2.0加上一些附加功能,因此先学习OpenGL ES 2.0,然后再学习着色器语言等似乎会更容易/更好些。

请不要告诉我使用NeHe(通常认为它充满了糟糕/旧的做法)、Durian教程等。

谢谢


1
OpenGL 4和OpenGL 3都是现代的OpenGL,而不是旧的固定函数OpenGL。因此,如果您学习了OpenGL 3,则完全可以使用OpenGL 4进行编码,需要学习的主要概念是“顶点缓冲对象和顶点数组对象(即VBO和VAO)”,以及它们的使用方法。 - Sayan Bhattacharjee
3个回答

9
是的,一定要从OpenGL ES 2.0开始。实际上,我建议从WebGL开始(它几乎就像是OpenGL ES 2.0)。这里的公共维基(链接)是一个很好的起点。WebGL的好处在于您不必处理编译/链接等问题,并且可以避免大量设置代码,因此您可以专注于实际的绘图(这真的是有趣的部分 :))。如果您有一本OpenGL ES 2.0书籍,那么应该也适用于WebGL。
此外,在仓库中有很多演示可以立即运行(并单击浏览器的“查看源代码”以直接跳转到代码)。从简单的例子开始,例如:image-texture-test、Colored Box、Textured Box。
这些示例连同您的OpenGL ES 2.0书籍,应该可以让您立即开始。玩得开心!
编辑:我还应该指出,如果您决定走OpenGL 4.1的路线,您可能不需要等待OpenGL 4.1书籍。OpenGL 3.3或4.0的书籍也可以胜任。

请注意,目前大多数浏览器的beta版本才支持webGL。因此,如果您需要尽快部署应用程序,您需要制作一个桌面版本。然而,如果您只是在学习,那么使用webGL是一个很好的开始方式。 - Shezan Baig

2
OpenGL的版本通常会在之前的版本上添加新功能,因此我认为学习OpenGL 4.1实际上是学习OpenGL 3.0,因为基础相同,特别是如果你刚开始学习3D编程。
OpenGL ES 2.0是OpenGL 3.x的一种子集。
考虑到这些“事实”,我认为学习OpenGL 3+或OpenGL ES 2+差不多,只有细节上的区别。
请注意,根据您的桌面平台(操作系统、图形卡),您可能无法访问OpenGL 3实现。
在桌面上实现OpenGL ES 2也可能不可用。
Shezan Baig建议从WebGL入手可能会帮助您解决这个问题,因为它将OpenGL初始化问题委托给浏览器-甚至有些人实现了WebGL over DirectX以提高其可用性。
我的建议是,在学习时,您应该专注于3D原理、算法和数学。这些是最难掌握的。OpenGL(ES或非ES)或DirectX等实现“细节”差异不大。
更确切地说,我建议您从您最熟悉的编程语言开始。我会选择在这种语言中使用OpenGL 1.x/2.x:这些“旧”版本的GL包含了许多辅助函数(glBegin/glVertex/glEnd;glMultMatrix等),在3.x+中已被“弃用”。使用这些函数,您将更加“高效”地测试算法。
在3D编程中有很多东西,您可以找到已经免费提供的参考书,并选择对您的用例有用的信息。

你建议从哪些方面开始学习“3D原理、算法和数学”? - zxspectrum
编辑了答案以包含一些建议。 - rotoglup

0

是的,使用GLES2。

1)它是可移植的。

2)即使对于PC,也要按照GLES2的方式进行操作。(除非您需要GL3/4功能并且已经很高级了)。

3)您想要使用着色器,而GLES2适合学习正确的方法。

请记住,在Windows上OpenGL很糟糕。驱动程序通常很差。以netbook为例,它支持hlsl 2.0,但不支持GLSL着色器,并且仅运行GL-1.3。


1
“驱动程序很烂”这一点通常并不正确。真正“糟糕”的是英特尔的驱动程序,而且大多数情况下,上网本都配备了英特尔GPU。另一方面,AMD和Nvidia都有良好的驱动程序。通常情况下,无论操作系统如何,这一点都是正确的。 - Hi-Angel
从我的经验来看,与D3D相比(在功能和性能方面),Windows上的OpenGL驱动程序通常很差(在评论时)。唯一不适用于此情况的是Nvidia。还要注意,该帖子发布于2011年,代表了当时和更早时期的GPU。在现在的情况下,事情可能已经改变了。 - zezba9000

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接