OpenGL是一个底层图形库规范。它为程序员提供了一个小的几何图元(点、线、多边形、图片和位图)库和一个支持2D/3D几何对象绘图命令库,通过所提供的图元和命令来控制对象的呈现(绘图)。

  由于OpenGL的绘图命令仅限于画一些简单的几何图元(如点、线和多边形),所以OpenGL实用工具包(GLUT)应运而生,它能够帮助绘画出更复杂的三维对象(比如球体、圆环甚至茶壶)。如果你要构建需要利用到OpenGL全部特性的应用的话,GLUT未必适合,但是对刚学习OpenGL的人来说GLUT就非常有用。

  GLUT是为满足windows系统下OpenGL程序独立编程接口的需求而设计的,接口被设计的非常简单而又实用。从OpenGL中移除windows系统的操作是一个非常英明的决定,因为这意味着OpenGL图形系统能够被应用于更广泛的系统中(包括功能强大但昂贵的图形工作站以及需要大量图形运算的视频游戏、互动电视机机顶盒和个人电脑)。

  GLUT简化了用OpenGL进行渲染的程序的实现。GLUT应用编程接口(API)只需要调用很少的接口就可以用OpenGL来渲染图形场景,并且GLUT接口所需的参数也相对较少。

  渲染管线

  大多数OpenGL实现都有着类似的操作顺序,这一系列的操作过程叫做OpenGL渲染管线。尽管OpenGL并不严格要求需要按照渲染管线这一顺序来实现,但是这样做可以为预测OpenGL下一步将要做什么提供可靠的指引。几何数据(点、线、多边形)将会沿着一条依次通过求值器、顶点操作和装配阶段的路径进行传递,而像素数据(像素,图形,位图)将会沿着另一条路径传递,在最终像素写入帧缓冲区前,像素数据和几何数据都会经历相同的最后一步——栅格化处理。

  Display Lists: 所有数据,无论是用来描述几何体还是像素的,都可以保存在一个display list中来在当下或将来使用(用以替代display list的用法是在需要时立即处理数据——称为立即模式)当一个display list被触发时,保存的数据就像立即模式一样被发送至显示器。

  Evaluators: 所有几何原语最终都是由顶点描述的,但evaluator提供了一种用控制点表示面的方法。这种方法是拟合多项式,可以通过控制点提供面法线、颜色、和空间纹理坐标。

  基于顶点和图元的装配:对于顶点的数据,下一步就是将它们转换成图元。某些类型的顶点数据被转换为4x4的浮点型矩阵。空间坐标从三维世界中的一个位置被投影到您显示屏上的一个位置。在某些情形中,这一步之后会进行透视除法,利用它能够使远处的几何物体看起来比近处的物体小。然后,我们再对数据进行视口和景深的操作。至此,我们得到的结果是几何图元,这些图元与相关的颜色值和景深值,以及光栅化步骤的指标等一同进行转换。

  像素操作:在几何数据通过OpenGL渲染管线的一条路径的同时,像素数据则通过了另外一条路径。系统内存中的一个数组中的像素首先被解压,从若干格式中的一种转换成拥有恰当数目的分量的那种。然后,我们对数据进行尺度放缩,偏移,再根据像素映射处理,随后这些结果被发送至光栅化步骤。

  光栅化:光栅化是指将几何数据和像素数据都转换成片段的过程。各方形片段对应帧缓存中的一个像素。当顶点被连接起来形成直线,或者计算填充的多边形的内部像素时,直线的宽度,点的大小,着色模型,以及用以支持抗锯齿的覆盖计算等都被考虑在内。颜色值和深度值被赋予各方形片段。然后,处理后的片段被存入合适的缓存中,在那里,它最终被转化成一个像素,从而完成了它的最终使命。

 库文件

  OpenGL提供了一组强大但原始的渲染命令,而且所有的高层绘制都必须通过这些命令来完成。有若干库文件能够简化您的编程任务,包括:

  • OpenGL Utility Library (GLU),它包含若干调用底层OpenGL命令的函数,这些函数能够进行诸如为某一特定观察方向和透视以及渲染表面设定矩阵的任务。
  • OpenGL Utility Toolkit (GLUT),它是一个视窗-系统分离的工具箱,由Mark Kilgard编写,用于隐藏不同视窗的API所带来的复杂性。

  包含文件

  对于所有OpenGL应用程序,你都需要在所有文件中包含gl.h。几乎所有OpenGL应用程序使用GLU,即上文提到的OpenGL实用库(OpenGL Utility Library),它也需要包含gl.h才能使用。所以几乎所有OpenGL源文件这样开头:

1
2
#include <GL/gl.h>
#include <GL/glu.h>

  如果你用OpenGL 实用工具集(OpenGL Utility Toolkit,即GLUT)来管理窗体事务,你需要包含:

1
#include <GL/glut.h>

  记住glut.h保证会正确包含gl.h和glut.h,所以把三个文件全包含是多此一举。为使你的GLUT程序通用性更佳,包含glut.h而 不要明确包含gl.h或glu.h。

 设置编译器

  在Windows上使用MS Visual Studio C++

  安装GLUT

  1. 如果你已经安装了MS Visual Studio C++ 5.0或以上版本,那么下列文件中的大多数就已经在您的机器上了。下列的GLUT文件需要复制到指定的路径下。
  2. 要开始安装:

  编译OpenGL/GLUT程序

  1. 创建一个新项目:

    • 从菜单中点选文件 | 新建
    • 点选项目选项卡
    • 点选Win32控制台应用程序 Console Application
    • 输入您的项目名称
  2. 为链接器指定要用到的库文件:
    • 从菜单中点选项目 | 设置
    • 对象/库模块中:输入"opengl32.lib glu32.lib glut32.lib"
  3. 向项目中添加或创建文件:
    • 从文件菜单中点选项目 | 向项目添加 | 文件
    • 添加需要的程序文件
  4. 构建并运行

  Silicon Graphics Workstation

Makefile:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# insert the name of your source file here (omit the .c)
TARGET = progname
 
LIBS = -lglut -lGLU -lGL -lXmu -lXext -lXi -lX11 -lm
 
CC = /usr/gnu/bin/gcc
 
default: $(TARGET)
 
all: default
 
.c.o:
    $(CC) -c $<
 
$(TARGET): $$@.o
    $(CC) $@.o -Wall $(LIBS) -o $@
 
clean:
    -rm -f *.o $(TARGET)

  英文来源:http://www.cs.uccs.edu/~ssemwal/introduction.html

OpenGL 简介的更多相关文章

  1. 第一课 opengl简介

    1. 什么是opengl: opengl是图形硬件的一种软件接口. 2. opengl对场景中的图像进行渲染时所执行的主要图形操作 1)根据几何图元创建形状,从而建立物体的数学描述. 2)在三维空间中 ...

  2. Android 显示系统:OpenGL简介和Gralloc代码分析

    一.OpenGL ES与EGL Android的GUI系统是基于OpenGL/EGL来实现的. 由于OpenGL是通用函数库,在不同平台系统上需要被“本土化”——把它与具体平台的窗口系统建立起关联,F ...

  3. OpenGL概述

    简介 状态机 glBegin()与glEnd() glFlush()与glFinish() OpenGL简介 OpenGL是图形硬件的一种软件接口.它被设计为硬件独立的接口,可用于多种不同硬件平台.O ...

  4. Dev-Cpp配置OpenGL图形库(成功版本:Dev-Cpp 5.7.1 MinGW 4.8.1)

    ★配置前须知:Dev-Cpp自带OpenGL的使用和OpenGL简介 (附Dev-Cpp下载地址:http://sourceforge.net/projects/orwelldevcpp/?sourc ...

  5. 最简单的视音频播放示例5:OpenGL播放RGB/YUV

    本文记录OpenGL播放视频的技术.OpenGL是一个和Direct3D同一层面的技术.相比于Direct3D,OpenGL具有跨平台的优势.尽管在游戏领域,DirectX的影响力已渐渐超越OpenG ...

  6. 用MFC实现OpenGL编程

    一.OpenGL简介 众所周知,OpenGL原先是Silicon Graphics Incorporated(SGI公司)在他们的图形工作站上开发高质量图像的接口.但最近几年它成为一个非常优秀的开放式 ...

  7. OpenGL结合C#进行绘图

    转自:http://www.cnblogs.com/wangshide/archive/2012/04/14/2447499.html 本人对OpenGL产生了浓厚的兴趣,又想学习一下C#这个语言,就 ...

  8. OpenGL初学:安装配置与第一个程序

    OpenGL初学:安装配置与第一个程序 2014年10月12日 12:37:03 process-z 阅读数:12413 标签: opengl安装教程 更多 个人分类: OpenGL   计算机图形学 ...

  9. OpenGL开发入门

    1.OpenGL简介: OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL三维图形 API 的子集,针对手机.PDA和游戏主机等嵌入式设备而设计.该API ...

随机推荐

  1. iOS内存管理编程指南

    iOS 内存管理 目录[-] 一:基本原则 二:成员变量的内存管理 三:容器对象与内存管理 四:稀缺资源的管理 五:AutoRelease 六:其他注意事项 iOS下内存管理的基本思想就是引用计数,通 ...

  2. 【转载】ADO,OLEDB,ODBC,DAO的区别

    原文:ADO,OLEDB,ODBC,DAO的区别 ODBC(Open Database Connectivity,开放数据库互连) 1992年,微软公司开放服务结构(WOSA,Windows Open ...

  3. Installing Chocolatey

    https://chocolatey.org/install To install chocolatey now, open an administrative command prompt and ...

  4. [CF738D]Sea Battle(贪心)

    题目链接:http://codeforces.com/contest/738/problem/D 题意:1*n的格子里有a条长为b的船.有一个人射了k发子弹都没打中船,现在问最少再打多少次一定能保证射 ...

  5. NPO与X7R、X5R、Y5V、Z5U神马的有啥区别

    主要是介质材料不同.不同介质种类由于它的主要极化类型不一样,其对电场变化的响应速度和极化率亦不一样. 在相同的体积下的容量就不同,随之带来的电容器的介质损耗.容量稳定性等也就不同.介质材料划按容量的温 ...

  6. LINUX RPM卸载

    1. which httpd /usr/bin/httpd 2.rpm -q -f /usr/bin/httpd name 3.rpm -e name 如果有依赖: rpm -e --allmatch ...

  7. 图-用DFS求连通块- UVa 1103和用BFS求最短路-UVa816。

    这道题目甚长, 代码也是甚长, 但是思路却不是太难.然而有好多代码实现的细节, 确是十分的巧妙. 对代码阅读能力, 代码理解能力, 代码实现能力, 代码实现技巧, DFS方法都大有裨益, 敬请有兴趣者 ...

  8. phpcms 修改后台 主页面的模板

    代码在phpcms/modules/admin/templates/main.tpl.php 在该文件修改就可以修改 phpcms后台管理系统的 首页面.

  9. 网页自适应@media

    @media (min-width: 768px){ }/*屏幕最小为768px时调用括号里的属性*/ @media (max-width: 767px) {} /*屏幕最大为768px时调用括号里的 ...

  10. 新知识Tom大叔

    http://www.cnblogs.com/TomXu/archive/2011/12/15/2284752.html http://www.cnblogs.com/TomXu/archive/20 ...