OpenGL 简介
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
- 如果你已经安装了MS Visual Studio C++ 5.0或以上版本,那么下列文件中的大多数就已经在您的机器上了。下列的GLUT文件需要复制到指定的路径下。
- 要开始安装:
- 右键单击各链接
- 选择另存为...
- 接受默认名称(只需点击保存即可)
- 库文件(放置到Visual C++下的lib\子路径中)
- 包含文件(放置到Visual C++下的include\GL\子路径中)
- 动态链接库文件(放置到\Windows\System路径中)
编译OpenGL/GLUT程序
- 创建一个新项目:
- 从菜单中点选文件 | 新建
- 点选项目选项卡
- 点选Win32控制台应用程序 Console Application
- 输入您的项目名称
- 为链接器指定要用到的库文件:
- 从菜单中点选项目 | 设置
- 在对象/库模块中:输入"opengl32.lib glu32.lib glut32.lib"
- 向项目中添加或创建文件:
- 从文件菜单中点选项目 | 向项目添加 | 文件
- 添加需要的程序文件
- 构建并运行
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 简介的更多相关文章
- 第一课 opengl简介
1. 什么是opengl: opengl是图形硬件的一种软件接口. 2. opengl对场景中的图像进行渲染时所执行的主要图形操作 1)根据几何图元创建形状,从而建立物体的数学描述. 2)在三维空间中 ...
- Android 显示系统:OpenGL简介和Gralloc代码分析
一.OpenGL ES与EGL Android的GUI系统是基于OpenGL/EGL来实现的. 由于OpenGL是通用函数库,在不同平台系统上需要被“本土化”——把它与具体平台的窗口系统建立起关联,F ...
- OpenGL概述
简介 状态机 glBegin()与glEnd() glFlush()与glFinish() OpenGL简介 OpenGL是图形硬件的一种软件接口.它被设计为硬件独立的接口,可用于多种不同硬件平台.O ...
- 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:OpenGL播放RGB/YUV
本文记录OpenGL播放视频的技术.OpenGL是一个和Direct3D同一层面的技术.相比于Direct3D,OpenGL具有跨平台的优势.尽管在游戏领域,DirectX的影响力已渐渐超越OpenG ...
- 用MFC实现OpenGL编程
一.OpenGL简介 众所周知,OpenGL原先是Silicon Graphics Incorporated(SGI公司)在他们的图形工作站上开发高质量图像的接口.但最近几年它成为一个非常优秀的开放式 ...
- OpenGL结合C#进行绘图
转自:http://www.cnblogs.com/wangshide/archive/2012/04/14/2447499.html 本人对OpenGL产生了浓厚的兴趣,又想学习一下C#这个语言,就 ...
- OpenGL初学:安装配置与第一个程序
OpenGL初学:安装配置与第一个程序 2014年10月12日 12:37:03 process-z 阅读数:12413 标签: opengl安装教程 更多 个人分类: OpenGL 计算机图形学 ...
- OpenGL开发入门
1.OpenGL简介: OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL三维图形 API 的子集,针对手机.PDA和游戏主机等嵌入式设备而设计.该API ...
随机推荐
- Python3基础 print 自带换行功能
镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...
- C# 返回Foreach集合
IEnumerable<DataRow> DetailRows() { foreach (DataRow dr in EditData.Tables[tb_ ...
- Know How To Use Check Box Mapping Of Other Values Property In Oracle Forms
Check Box Mapping of Other Values specifies how any fetched or assigned value that is not one of the ...
- [C程序设计语言]第四部分
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- C#计算某一些任务的执行时间(消耗时间)
class Program { static void Main(string[] args) { System.Diagnostics.Stopwatch sw = new System.Diagn ...
- poj 1410 线段相交判断
http://poj.org/problem?id=1410 Intersection Time Limit: 1000MS Memory Limit: 10000K Total Submissi ...
- python_way ,day23 API
python_way ,day23 1.api认证 .api加密动态请求 2.自定义session 一.api认证 首先提供api的公司,如支付宝,微信,都会给你一个用户id,然后还会让你下一个SD ...
- 预习 jQuary
一.jQuary简介 1.jQuery 库 - 特性 jQuery 是一个 JavaScript 函数库. jQuery 库包含以下特性: HTML 元素选取 HTML 元素操作 CSS 操作 HTM ...
- nyoj 1058部分和问题(DFS)
部分和问题 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 给定整数a1.a2........an,判断是否可以从中选出若干数,使它们的和恰好为K. 输入 首先, ...
- server-pc--------------->lspci,lsusb,meminfo等配置信息
安装yum install pciutils usbutils [root@server09 ~]# [root@server09 ~]# lspci00:00.0 Host bridge: Inte ...