OpenGL入门(1)
来源:互联网 发布:大芬油画村 知乎 编辑:程序博客网 时间:2024/04/30 13:38
注:本文用全角括号“()”表示转义或注释,原括号用途全部使用半角括号“()”。
步入新阶段,开发方向从Computer Vision转向了图形处理,需要学习OpenGL相关的开发技术。在Mentor的建议下,我采用了经典的“红宝书”(以下称Redbook)——OpenGL编程指南(原书OpenGL Programming Guide,作者Dave Shreiner)作为学习指导书。在OpenGL入门系列里,我准备根据书中的一些要点结合例程写一些自己的体会分享。
Redbook在一开始便提到,“OpenGL(Open Graphics Library,GL图形库)图形系统是图形硬件的一个软件接口”,首先OpenGL是基于图形硬件的,如nvidia或amd的GPU,其次是一个软件接口,使得我们可以通过软件程序调用接口函数,实现精彩的图形呈现。书中还提到,“OpenGL实际上是一种独立于硬件的程序接口规范。在一种特定类型的硬件上,所使用的是它的一种特定实现”。这句话我理解的意思是,OpenGL本身是一种平台无关的抽象的接口规范,在不同情况下有不同的实现,在基于特定硬件时有针对性的具体实现。
在第1章中,Redbook提到了几个需要掌握的概念和观点:OpenGL程序的基本结构、函数的语法、OpenGL渲染管线的操作序列、渲染复杂性、OpenGL是一个状态机、OpenGL渲染管线、GLUT(GL Utility Toolkit)。
1.1 什么是OpenGL
OpenGL是一种“流线型”接口规范。为了能在不同硬件平台上实现,OpenGL并不包含用于执行窗口任务或者获取用户输入之类的函数;需要通过窗口系统来控制程序所使用的特定硬件。OpenGL的程序中,通过基本几何图元(如点、直线和多边形)来创建需要的复杂物体模型。
Redbook通过列举一系列封面彩图为例子介绍OpenGL渲染的流程。例子用线框模型(wireframe model)显示场景,使用大气效果(合称为“雾”)加入了深度提示(depth-cue),加入抗锯齿(antialiased)效果,分别进行单调着色(flat-shading)和平滑着色(smoth-shading),在场景上添加阴影(shadow)和纹理(texture)效果,其中纹理贴图(texture mapping)可以将一幅2D图像投射到一个3D物体上,随后还添加了运动模糊(motion-blurred)、展示角度转换、景深效果(depth-of-field effect)等高级效果。这是一个具体的例子,我们可以从中总结出OpenGL对场景中图像进行渲染时的主要图形操作:
(1). 根据几何图元创建形状,建立物体的数学描述;
(2). 在3D空间中排列物体,选择视角;
(3). 计算颜色;
(4). 把物体的数学描述和物体相关颜色信息转换为屏幕上的像素,即光栅化(rasterization)。
在有些OpenGL实现中,显示所创建的图形的计算机和运行图形程序的计算机可以不同,运行图形程序并发出绘图命令的计算机称为客户机(client),接收这些命令并执行绘图任务的计算机称为服务器(server)。客户机发给服务器的命令的传输格式(协议)总是相同的,因此OpenGL程序可以通过网络运行。
OpenGL一系列相关的处理阶段叫做OpenGL渲染管线(pipeline)。管线分为固定管线(fix pipeline)和可编程管线(programmable pipeline)。当你使用固定管线时,可以设置OpenGL的各种状态并使得一直生效直到再次修改。因此,OpenGL实际上是一个状态机。而如果使用可编程管线的着色器(shader),根据不同版本,shader所能识别的状态的数量也不同。
1.2 OpenGL相关库函数
1.2.1 包含文件
- OpenGL入门【1 快速入门】
- OpenGL (1) 入门
- OpenGL入门(1)
- opengl入门1
- opengl入门6。1
- Opengl ES入门1
- OpenGL 入门1
- opengl入门系列1- OpenGL纹理环绕
- OpenGL入门
- OpenGL 入门
- Opengl入门
- OpenGL 入门
- OpenGL 入门
- opengl入门
- OpenGL入门
- opengl入门
- OpenGL入门
- openGL入门
- 内核中的likely()与unlikely函数
- xp、win7下如何取消屏保、取消电源管理
- 数组指针和指针数组
- C,C++开源项目中的100个Bugs
- 自己玩玩的MakeFile
- OpenGL入门(1)
- RTSP教程
- C#水晶报表教程
- 信息推送
- 用类的友元函数完成运算符的重载
- java的常量
- 最长公共子串LCS
- HTML学习笔记(2)
- 2013,我们需要正能量