【OpenGL】 第一篇 OpenGL概览

 

------------------------------------------------------------------------------------------------------------------------编程

从如今开始,认真学习OpenGL的相关知识,把读过的每一章都作记录,但愿能坚持到最后。缓存

------------------------------------------------------------------------------------------------------------------------网络

我从你们所熟知的”OpenGL红宝书“,即OpenGL编程指南第八版开始入手,该书已经结合了OpenGL4.3的新特性。架构

由于是看的是中文翻译版本,我打算和英文原版一块儿看,有时候确实是必须的,由于看英文更接近本质。app

------------------------------------------------------------------------------------------------------------------------编程语言

坚持每一篇都写个例子,印象会更加深入。好了,不说废话,开始了。ide

------------------------------------------------------------------------------------------------------------------------函数

【OpenGL背景】工具

OpenGL发展到如今,已经超过了20年的时间。做为一个成熟而久负盛名的跨平台的计算机图形应用程序接口规范,学习

它已经被普遍应用于游戏,影视,军事,航空航天,地理,医学,机械设计,以及各种科学数据可视化的领域。

另外,随着网络以及移动平台的崛起,WebGL以及OpenGL ES的标准也逐渐深刻人心,这二者同OpenGL有着千丝万缕的联系。

 

OpenGL几乎支持全部现有的主流操做系统平台,包括Windows、Mac OS X以及各类UNIX平台。同时也能够用于几乎全部

主流的编程语言包括C/C++、Java、C#、VB、Python、Perl等。能够说OpenGL无处不在。而目前流行的游戏引擎cocos2d-x

底层的渲染便是采用了OpenGL技术,要理解以及修改引擎架构,就不可避免的要接触OpenGL,这也是我学习的一个方向。

------------------------------------------------------------------------------------------------------------------------

【什么是OpenGL】

OpenGLOpen Graphics Library,开放图形库。

OpenGL是图形硬件的一种软件接口(The OpenGL graphics system is a software interface to graphics hardware.),

便可以对图形硬件设备特性进行访问的软件库,方便咱们开发交互式的三维计算机图形应用程序。

OpenGL被设计为与硬件无关的接口,所以它是跨平台的。那么咱们就能够在不考虑操做系统的前提下,实现咱们的OpenGL接口。

 

OpenGL自身并不包含任何执行窗口任务或者处理用户输入的函数,不过不要紧,咱们将会用到一个第三方跨平台的库

GLUT(OpenGL Utility Toolkit)来帮助咱们处理这些窗口事件,关于它的内容接下来会介绍。

另外,OpenGL也没有提供任何用于表达三维物体模型(models of three-dimensional objects),

或者读取图像文件(例如JPEG文件)的操做。

取而代之,咱们须要经过一系列的几何图元(包括点、线、三角形以及Patch)来建立三维空间的物体。

 

OpenGL是采用客户端-服务端的形式实现的,咱们本身所编写的应用程序能够当作客户端,而计算机图形硬件厂商所

提供的OpenGL实现能够看作是服务端。(OpenGL is implemented as a client-server system,with the application

you write being considered the client, and the OpenGL implementation provided by the manufacturer

of your computer graphics hardware being the server.

 

OpenGL 是基于光栅化的系统(rasterization-based system),用于生成图像。但还有其余方法例如光线追踪

(ray tracing),但有可能也须要用到OpenGL来显示图像。

------------------------------------------------------------------------------------------------------------------------ 

【OpenGL程序渲染图像主要的操做】

一、为构建形状(Shape)指明(Specify)来自OpenGL的几何图元的数据。

二、使用不一样的着色器(Shapes)对输入的图元数据执行计算操做,由此来判断它们的位置、颜色、以及其余渲染属性。

三、将输入图元的数学描述转换为在屏幕位置上相对应的片断(fragments)。这个过程称之为光栅化(Rasterization)。

四、最后,为每一个通过光栅化阶段的片断执行片断着色器(fragment shader),该操做决定了片断的最终颜色以及位置。

五、有时可能须要对每一个片断(per-fragment)执行一些额外的操做。

例如判断片断产生的对象是否可见,或者将片断的颜色和当前屏幕位置的颜色相融合。

 ------------------------------------------------------------------------------------------------------------------------

 【理解经常使用的图形学名词】

渲染(Rendering):表示计算机从模型建立最终图像的过程。

 

模型(Model):或者又称为对象,是经过几何图元(geometric primitives)例如点(points)、线(lines)

和三角形(triangles)来构建的。而这些几何图元是经过顶点(vertices)来指明的。

 

着色器(Shaders):它是图形硬件设备所执行的一类特殊函数。

理解着色器的最好方法是把它看作专门为图形处理单元(GPU)编译的一种小型程序。

OpenGL在其内部包含了全部的编译器工具,能够直接从着色器代码建立GPU执行所需代码。

在OpenGL中,会用到四种不一样的着色阶段(shader stages)。最经常使用的包括顶点着色器(vertex shaders)和

片断着色器(fragment shaders)。前者用于处理顶点数据(vertex data),后者用于处理光栅化后的片断数据。

 

像素(pixel):指的是显示器上最小的可视单元。在计算机系统中存储于帧缓存中。

 

帧缓存(framebuffer):由图形硬件设备管理的一块独立内存区域,能够直接映射到最终的显示设备上。

 ------------------------------------------------------------------------------------------------------------------------

【关于GLUT以及GLEW】 

你可能会常常在OpenGL程序代码中看到以glut开头的函数,他们来自第三方库OpenGL Utility Toolkit,就是咱们所说的GLUT。

这是一个很是流行的跨平台工具库(cross-platform),能够用来显示窗口、管理用户输入,以及执行其余操做。

另外Freeglut是原始OpenGL库的一个新变种。

 

你也可能会看到相似glewInit()这样的函数,它来源于OpenGL Extension Wrangler,也就是GLEW

官网关于它的介绍以下:

The OpenGL Extension Wrangler Library (GLEW) is a cross-platform open-source C/C++ extension loading library.

GLEW provides efficient run-time mechanisms for determining which OpenGL extensions are supported on the target platform.

正如上文所说的,GLEW是一个跨平台的C++扩展库,基于OpenGL图形接口。GLEW能自动识别你的平台所支持的所有OpenGL高级扩展涵数。

 ------------------------------------------------------------------------------------------------------------------------

看了又写了这么多字,想必都有点迷糊了。

接下来就应该写写Hello OpenGL了。

 

 

2015.06.29

广州

相关文章
相关标签/搜索