OpenGL vs OpenGL ES和OpenGL 1.x vs OpenGL 2.0学习什么?

OpenGL vs OpenGL ES和OpenGL 1.x vs OpenGL 2.0学习什么?,opengl,opengl-es,Opengl,Opengl Es,我打算买一本关于OpenGL的书,但我有几个问题,我应该学习什么 我在致力于学习OpenGL 1.x或OpenGL 2.0之间左右为难,因为OpenGL ES 2.0只存在于3G和更高版本上,如果我要开发一个应用程序并将其放在app store上,我希望每个人都有一台iphone能够使用该应用程序 另外,我想用桌面OpenGL进行实验 因此,我的问题如下: 简单地说,我应该学习什么?如果我学习了桌面OpenGL,这会很容易转移到OpenGL ES吗?如果我知道c/c++中的OpenGL,我还会知

我打算买一本关于OpenGL的书,但我有几个问题,我应该学习什么

我在致力于学习OpenGL 1.x或OpenGL 2.0之间左右为难,因为OpenGL ES 2.0只存在于3G和更高版本上,如果我要开发一个应用程序并将其放在app store上,我希望每个人都有一台iphone能够使用该应用程序

另外,我想用桌面OpenGL进行实验

因此,我的问题如下:

简单地说,我应该学习什么?如果我学习了桌面OpenGL,这会很容易转移到OpenGL ES吗?如果我知道c/c++中的OpenGL,我还会知道OpenGL ES吗?有什么主要区别

另外,你会推荐我同时学习1.x和2.0吗?因为我之前说过,我希望所有iphone用户都能使用我的应用程序,而不仅仅是3G和更高版本


最后,你有什么推荐书吗?我真的很喜欢教程的风格。它非常容易理解,显示了大量代码,并仔细解释了每一行代码。

OpenGL ES 1.1使用了许多不推荐使用的旧功能,而OpenGL ES 2.0使用了现代的仅着色器顶点数组/缓冲区方法,更适合未来使用。如果您学习桌面GL,使用OpenGL ES不会有太多困难,因为它们非常相似

如果您真的想使用老式的OpenGL ES 1.1,那么我建议您学习桌面OpenGL 2.0(最好使用“OpenGL编程指南”/“红皮书”),它将教您旧的即时API以及现代顶点数组/缓冲区功能和(与“OpenGL着色语言”/“橙皮书”一书结合使用)还可以使用可编程着色器。这样,您就可以使用老式(1/(2))和现代((2)/3/4)桌面GL以及OpenGL ES 1.1和2.0

但是,如果您想直接从新的、现代的OpenGL编程方式开始(这可能是可取的,尽管旧样式是一种宝贵的经验),那么我建议您使用最新版的“OpenGL SuperBible”(OpenGL SuperBible),它将教您现代风格((2)/3/4)桌面OpenGL没有旧的不推荐的功能。但是,很多OpenGLES1.1代码对您没有多大用处(尽管您肯定会理解它的原理)。虽然我非常欣赏我对固定函数老式OpenGL的了解,但我还是建议初学者立即开始使用现代OpenGL,即使对于初学者来说可能有点难学,因为这是今天(和明天)进行硬件加速实时图形的方法


但真正重要的是,与用心学习API相比,您应该了解基本原理和3d图形的一般原理。这样,您就不会很难切换到其他API,比如Direct3D。

我自己也面临同样的问题,我的决定是使用OpenGL ES 2.0。首先是因为(iPhone 3GS或更好)。其次,因为OpenGL的未来是着色器,因为它们比ES 1的固定管道提供了更多的灵活性

也就是说,我要补充一点,使用着色器并不容易。与ES 1相比,在ES 2中设置所有内容需要付出更多的努力。更多的事情可能会出错,更多的时候,你会看到你的程序只创建了一个空白屏幕,让你挠头,想知道为什么

不过,一旦你掌握了基本知识,ES 2就没那么糟糕了。这只是一个相当陡峭的学习曲线

至于桌面与ES的问题,我建议学习ES。它是OpenGL的一个非常好的功能子集,允许您编写在更多平台上运行的程序。如果您想将代码移植到ES,使用完整的OpenGL可能会给您带来麻烦,因为其中有些方面无法翻译

为了让您开始使用OpenGL ES 2,我强烈推荐和