OpenGL 简介 已翻译 100%

O油菜 投递于 2013/05/02 20:16 (共 8 段, 翻译完成于 08-18)
阅读 7095
收藏 64
4
加载中

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

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

bigtiger02
bigtiger02
翻译于 2013/08/16 01:09
2

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

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

bigtiger02
bigtiger02
翻译于 2013/08/16 01:47
1

渲染管线

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

bigtiger02
bigtiger02
翻译于 2013/08/16 02:24
1

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

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

O油菜
O油菜
翻译于 2013/08/16 13:01
1

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

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

stoneyang
stoneyang
翻译于 2013/08/17 20:20
1

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

库文件

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

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

包含文件

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

#include <GL/gl.h>
#include <GL/glu.h> 
如果你用OpenGL 实用工具集(OpenGL Utility Toolkit,即GLUT)管理窗体事务,你需要包含:

#include <GL/glut.h>
记住glut.h保证会正确包含gl.h和glut.h,所以把三个文件全包含是多此一举。为使你的GLUT程序通用性更佳,包含glut.h而 不要明确包含gl.h或glu.h。
O油菜
O油菜
翻译于 2013/08/16 13:11
1

设置编译器

在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:

# 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)
stoneyang
stoneyang
翻译于 2013/08/17 23:49
1
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
加载中

评论(9)

半个黑客
半个黑客

引用来自“Maxiums”的评论

引用来自“爽歪歪ES”的评论

引用来自“Maxiums”的评论

现在都被DirectX主导了,OpenGL也是跟着DirectX来走了。

除windows平台,处处opengl, including ios, android, blackberry, html5, etc...

我说的是图形API标准,OpenGL新特性都是copy DirectX。

除了windows,你用什么?我一般用ubuntu工作,但是很多事情不得不在win下完成。天天黑win,用着盗版的好歹尊重一下。
k
kchr
如果想继续介绍 OpenGL 相关资料,建议翻译 Joe Groff 的 An intro to modern OpenGL,个人感觉适合没有基础的初学者

http://duriansoftware.com/joe/An-intro-to-modern-OpenGL.-Table-of-Contents.html
k
kchr
这文章过时了,现代的 3D 编程(包括 OpenGL 和 DirectrX 在内)都使用可编程管线,文章中的方式早就废弃了。打个比方,好比介绍 DOS 时代的编程。

google 搜索 OpenGL 相关 tutorial 时,要加上 modern 关键字,比如 "modern opengl tutorial"

2010 年出版的 OpenGL.SuperBible 第 5 版也更新了,也很不错。

除了 PC 机和 XBOX 以外,从超算到手机,估计都是用 OpenGL 系的了,前途远大。
三日月
三日月

引用来自“爽歪歪ES”的评论

引用来自“Maxiums”的评论

现在都被DirectX主导了,OpenGL也是跟着DirectX来走了。

除windows平台,处处opengl, including ios, android, blackberry, html5, etc...

你是说到处找数据包吗
Br00k
Br00k

引用来自“爽歪歪ES”的评论

引用来自“Maxiums”的评论

现在都被DirectX主导了,OpenGL也是跟着DirectX来走了。

除windows平台,处处opengl, including ios, android, blackberry, html5, etc...

我说的是图形API标准,OpenGL新特性都是copy DirectX。
爽歪歪ES

引用来自“Maxiums”的评论

现在都被DirectX主导了,OpenGL也是跟着DirectX来走了。

除windows平台,处处opengl, including ios, android, blackberry, html5, etc...
zruibin
zruibin
Mac下怎么用呀?可以直接把源码放进Xcode工程里吗?或者得?
饼干的荣耀
饼干的荣耀

引用来自“Maxiums”的评论

现在都被DirectX主导了,OpenGL也是跟着DirectX来走了。

MS走下坡了,DX无处借力
Br00k
Br00k
现在都被DirectX主导了,OpenGL也是跟着DirectX来走了。
返回顶部
顶部