OpenGL ES (OpenGL for Embedded Systems)是 OpenGL 三维图形 API 的⼦子集,针对⼿手机、PDA和游戏主机等嵌⼊入式设备⽽而设计,去除了了许多不不必要和性能较低的API接⼝口。
DirectX 是由很多API组成的,DirectX并不不是⼀一个单纯的图形API. 最重要的是DirectX是属于 Windows上⼀一个多媒体处理理API.并不不⽀支持Windows以外的平台,所以不不是跨平台框架. 按照性 质分类,可以分为四⼤大部分,显示部分、声⾳音部分、输⼊入部分和⽹网络部分.
Metal : Metal: Apple为游戏开发者推出了了新的平台技术 Metal,该技术能够为 3D 图 像提⾼高 10 倍的渲染性能.Metal 是Apple为了了解决3D渲染⽽而推出的框架
一、立即渲染模式和核心模式
立即渲染模式(Immediate mode)为早起低版本使用的渲染模式,也就是固定渲染模式。而OpenGL的大多数功能都被库隐藏起来,开发者很少有控制OpenGL如何进行计算的自由。但使用者迫切希望能有更多的灵活性。所以规范越灵活,则开发者对绘图细节有更多的掌控。
立即渲染模式 容易使用和能够立刻显示,但效率太低。从OpenGL3.2后,规范文档废弃立即渲染模式,采用核心模式(Core mode)。
当使用OpenGL的核心模式时,OpenGL强制用户使用现代的函数。如果试图使用一个已废弃的函数时,OpenGL会抛出一个错误并终止绘图。现代函数的优势是更高的灵活性和效率,然而也更难于学习。立即渲染模式从OpenGL实际运作中抽象掉了很多细节,因此它在易于学习的同时,也很难让人去把握OpenGL具体是如何运作的。现代函数要求使用者真正理解OpenGL和图形编程,它有一些难度,然而提供了更多的灵活性,更高的效率,更重要的是可以更深入的理解图形编程。
所有OpenGL的更高的版本都是在3.3的基础上,引入了额外的功能,并没有改动核心架构。新版本只是引入了一些更有效率或更有用的方式去完成同样的功能。因此,所有的概念和技术在现代OpenGL版本里都保持一致
opengl一大特性是对扩展的支持,当显卡公司提供新特性或渲染上的大优化,通常会以扩展的方式在驱动中实现。如果一个程序在支持这个扩展的显卡上运行,开发者可以使用这个扩展提供的一些更先进更有效的图形功能。通过这种方式,开发者不必等待一个新的OpenGL规范面世,就可以使用这些新的渲染特性了。就像书中所说:Whenever there is
a bug in the implementation this is usually solved by updating your video card drivers;
those drivers include the newest versions of OpenGL that your card supports. This is one
of the reasons why it’s always advised to occasionally update your graphic drivers.
二、状态机
OpenGL自身是一个巨大的状态机(State Machine):一系列的变量描述OpenGL此刻应当如何运行。OpenGL的状态通常被称为OpenGL上下文(Context)。
三、对象
OpenGL库是用C语言写的,同时也支持多种语言的派生,但其内核仍是一个C库。由于C的一些语言结构不易被翻译到其它的高级语言,因此OpenGL开发的时候引入了一些抽象层。“对象”就是其中一个。在OpenGL中一个对象是指一些选项的集合,它代表OpenGL状态的一个子集,可以将对象看作是C的结构体
// OpenGL的状态
struct OpenGL_Context {
...
object* object_Window_Target;
...
};
使用对象的好处:
使用对象的一个好处是在程序中,我们不止可以定义一个对象,并设置它们的选项,每个对象都可以是不同的设置。在我们执行一个使用OpenGL状态的操作的时候,只需要绑定含有需要的设置的对象即可。
例如有一些作为3D模型数据(一栋房子或一个人物)的容器对象,想绘制其中任何一个模型的时候,只需绑定一个包含对应模型数据的对象就可以了(当然,我们需要先创建并设置对象的选项)。拥有数个这样的对象允许我们指定多个模型,在想画其中任何一个的时候,直接将对应的对象绑定上去,便不需要再重复设置选项了。