前言
在学习OpenGL前,首先需要对OpenGL的相关领域概念有一定的了解,从而对学习内容有一个大概的理解和把握。
OpenGL
首先先了解一下OpenGL是什么,一般认为他是一个图形应用API(Application Programming Interface, 应用程序编程接口),包含一系列操作图形图像的函数,事实上,OenGL是一个Khronos组织制定并维护的规范(Specification)。这个规范的生产者一般来源于显卡生产商,并被公开寄存在这个组织当中。
核心模式和立即渲染模式
早期的OpenGL使用立即渲染模式(Immediate mode,也就是固定渲染管线),优点是方便,门槛低,简单易懂,缺点是只能调用已有的函数,很多地方不能自己进行编辑,而是采用早已固定封装好的形式,相对来说效率比较低。是最开始采用的图形渲染模式。
随着需求的发展,对于效率和扩展性等的需求不断提升,核心模式(Core-profile)应运而生,这个模式完全移除了旧特性,同时具有更高的灵活性和效率,但是同时也增加了学习成本,立即渲染模式抽象掉的很多细节都在这里可以进行自己编辑控制,要求使用者真正理解图形编程。
一些总结
OpenGL一大特点就是它的拓展性,当一个显卡公司提出一个新特性或者渲染上的大优化,通常会以扩展的方式在驱动中实现。如果一个程序在支持这个扩展的显卡上运行,开发者可以使用这个扩展提供的一些更先进更有效的图形功能。通过这种方式,开发者不必等待一个新的OpenGL规范面世,就可以使用这些新的渲染特性了,只需要简单地检查一下显卡是否支持此扩展。通常,当一个扩展非常流行或者非常有用的时候,它将最终成为未来的OpenGL规范的一部分。
OpenGL本身是一个巨大的状态机,时时刻刻都在运行,通过函数改变设置状态从而改变整个屏幕的图形处理和显示,还会有对应的状态操作函数,根据一些状态执行对应的操作。
OpenGL本身是由c写的,但是也有其他语言的库可使用,一般来说推荐c语言进行学习,在OpenGL中一个对象是指一些选项的集合,它代表OpenGL状态的一个子集。比如,我们可以用一个对象来代表绘图窗口的设置,之后我们就可以设置它的大小、支持的颜色位数等等。可以把对象看做一个C风格的结构体(Struct)