我打算买一本关于OpenGL的书,但我对我应该学习的东西有一些疑问。
我在专心学习OpenGL 1.x或OpenGL 2.0之间挣扎,因为OpenGL ES 2.0仅存在于3G及更高版本,如果我要开发应用程序并将其放在应用程序商店,我希望每个人使用能够使用该应用程序的iPhone。
另外,我想试用桌面OpenGL。
所以,我的问题如下:
简单地说,我应该学习什么?如果我学习桌面OpenGL,这可以很容易地转移到OpenGL ES吗?就像我在c / c ++中认识OpenGL一样,我是否也知道OpenGL ES,那里有什么主要的区别?另外,你会建议我学习1.x和2.0,因为我之前说过的具体原因,我希望所有iphone用户能够使用我的应用程序,而不仅仅是3G及其他?
最后,你会推荐哪些书?我非常喜欢this教程的风格。它非常容易理解,显示了大量代码,并仔细解释了每一行代码。
答案 0 :(得分:4)
我自己也遇到了同样的问题,我的决定是使用OpenGL ES 2.0。首先是因为the great majority of iOS devices in use today can run it(iPhone 3GS或更好)。其次,因为OpenGL的未来是着色器,因为它们比ES 1的固定管道提供了更多的灵活性。
那就是说,我会补充一点,使用着色器并不容易。在ES 2中设置所有内容需要花费很多精力才能在ES 1中进行设置。更多的事情可能会出错,还有很多次你会看到你的程序只会创建一个空白的屏幕,让你抓不到它头,想知道为什么。
一旦你掌握了基础知识,ES 2并不是那么糟糕。这只是一个相当陡峭的学习曲线。
至于桌面与ES问题,我建议学习ES。这是一个非常好的& OpenGL的功能子集,允许您编写在更多平台上运行的程序。如果您想将代码移植到ES,使用完整的OpenGL可能会让您遇到麻烦,因为有些方面无法翻译。
为了开始使用OpenGL ES 2,我强烈推荐this tutorial和this book。
答案 1 :(得分:1)
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”,它将教你现代风格((2)/ 3/4)桌面OpenGL没有旧的弃用功能。但是,很多OpenGL ES 1.1代码对你没什么用处(尽管你肯定会理解它的原理)。虽然我非常欣赏我对固定功能老式OpenGL的了解,但我宁愿建议初学者立即开始使用现代OpenGL,即使对初学者来说可能有点难学,因为这是通往今天(和明天)做硬件加速的实时图形。
但真正重要的是,与学习API相比,你应该理解一般的3D图形的基本原理和原理。然后,无论如何,转换到其他API(例如Direct3D)都没有太大困难。