OpenGL 3.x和2.x之间有很大的区别吗?学习OpenGL 2.x是浪费时间,还是两者都遵循相同的概念?我记得在某个地方读到过2.x是基于状态的,而3.x则不是,这正确吗?
请注意,OpenGL 3已经废弃了许多函数,特别是早期OpenGL的函数。如果您使用过时的教程(比如大多数NeHe的教程),那么您很可能会习惯于使用过时的OpenGL 2的风格。
在OpenGL 3中没有固定的渲染管线(如果您不使用向后兼容功能)。您必须使用着色器程序。不再有glBegin/glEnd函数。您必须使用顶点缓冲区。这些功能在OpenGL 2中已经可用,但大多数教程仍使用glBegin/glEnd以及设置OpenGL颜色属性。这是一个非常重要的区别。
OpenGL 2提供了无数种方式来在屏幕上显示图像,每种方式都至少有一个流行的教程进行介绍。OpenGL 3放弃了其中许多功能,包括OpenGL 2的“初学者子集”(固定函数glBegin/glEnd)。因此,如果您长期目标是面向OpenGL 3,请从一开始就开始使用它。没有比被卡在死胡同更令人沮丧的事情了。
它们几乎完全向后兼容,因此您学习早期版本时学到的任何内容都将可以很好地应用于后续版本。如果您需要在特定领域取得成功,则 2.0 可能是一个不错的选择。如果您查看OpenGL 维基百科页面,您可以了解各个版本添加了哪些功能,并自行决定哪些功能可能对您有用。
了解有最多学习材料的内容。NeHe's tutorials 是一个好的起点。
几个月前我做过一些OpenGL的工作,虽然我不记得我当时使用的版本是什么,但我可以告诉你,最重要的是概念。特别是当你刚开始入门时,不需要处理着色器之类的东西。
(请参见Malte Clasen的答案。)