OpenGL是一个底层图形库规范。它为次序员供应了一个小的几何图元(点、线、多边形、图片和位图)库和一个支持2D/3D几何Tools绘图号召库,颠末所供应的图元和号召来操纵Tools的呈现(绘图)。
由于OpenGL的绘图号召仅限于画一些轻易的几何图元(如点、线和多边形),所以OpenGL实用Tools包(GLUT)应运而生,它可以协助绘画出更复杂的三维Tools(比如球体、圆环甚至茶壶)。假设你要构建需求使用到OpenGL全部特点的运用的话,GLUT未必适宜,可是对刚学习OpenGL的人来说GLUT就非常有效。
GLUT是为满足windows系统下OpenGL次序自力编程接口的需求而设计的,接口被设计的非常轻易而又实用。从OpenGL中移除windows系统的操作是一个非常英明的决定,因为这意味着OpenGL图形系统可以被运用于更广泛的系统中(包括功用弱小但昂贵的图形Task站和需求大量图形运算的视频游戏、互动电视机机顶盒和个人电脑)。
GLUT简化了用OpenGL履行衬着的次序的完成。GLUT运用编程接口(API)只需求调用很少的接口就可以够用OpenGL来衬着图形场景,并且GLUT接口所需的参数也绝对较少。
衬着管线
大大大多数OpenGL完成都有着类似的操作次第,这一系列的操作过程叫做OpenGL衬着管线。固然OpenGL实在不严格请求需求按照衬着管线这一次第来完成,可是多么做可以为猜想OpenGL下一步将要做什么供应可靠的指引。几何数据(点、线、多边形)将会沿着一条依次颠末求值器、顶点操作和装配阶段的道路履行传递,而像素数据(像素,图形,位图)将会沿着别的一条道路传递,在超级像素写入帧缓冲区前,像素数据和几何数据都会经历相似的最后一步——栅格化处理。
Display Lists: 一切数据,不论是用来描画几何体还是像素的,都可以保管在一个display list中来在当下或将来应用(用以交换display list的用法是在需求时立即处理数据——称为立即方式)当一个display list被触发时,保管的数据就像立即方式一样被发送至显示器。
Evaluators: 一切几何原语超级都是由顶点描画的,但evaluator供应了一种用操纵点表现面的方法。这类方法是拟合多项式,可以颠末操纵点供应面法线、颜色、和空间纹理坐标。
基于顶点和图元的装配:关于顶点的数据,下一步就是将它们转换成图元。某些类型的顶点数据被转换为4x4的浮点型矩阵。空间坐标从三维全国中的一个位置被投影到您显示屏上的一个位置。在某些状况中,这一步之后会履行透视除法,使用它可使远处的几何物体看起来比近处的物体小。然后,我们再对数据履行视口和景深的操作。至此,我们失掉的结果是几何图元,这些图元与相关的颜色值和景深值,和光栅化步伐的目的等一同履行转换。
像素操作:在几何数据颠末OpenGL衬着管线的一条道路的同时,像素数据则颠末了此外一条道路。系统内存中的一个数组中的像素首先被解压,从若干格式中的一种转换成具有恰当数目的分量的那种。然后,我们对数据履行规范放缩,偏移,再根据像素映照处理,随后这些结果被发送至光栅化步伐。
光栅化:光栅化是指将几何数据和像素数据都转换成片段的过程。各方形片段对应帧缓存中的一个像素。当顶点被连接起来组成直线,或者打算填充的多边形的内部像素时,直线的宽度,点的大小,着色模型,和用以支持抗锯齿的掩饰打算等都被思考在内。颜色值和深度值被赋予各方形片段。然后,处理后的片段被存入适合的缓存中,在何处,它超级被转化成一个像素,从而完成了它的超级Task。
OpenGL供应了一组弱小但原始的衬着号召,而且一切的高层绘制都必须颠末这些号召来完成。有若干库文件可以简化您的编程Task,包括:
包含文件
关于一切OpenGL运用次序,你都需求在一切文件中包含gl.h。几乎一切OpenGL运用次序应用GLU,即上文提到的OpenGL实用库(OpenGL Utility Library),它也需求包含gl.h才华应用。所以几乎一切OpenGL源文件多么收尾:
#include <GL/gl.h> #include <GL/glu.h>假设你用OpenGL 实用Tools集(OpenGL Utility Toolkit,即GLUT)来管理窗体事务,你需求包含:
#include <GL/glut.h>记取glut.h保证会精确包含gl.h和glut.h,所以把三个文件全包含是弄巧成拙。为使你的GLUT次序通用性更佳,包含glut.h而 不要清楚包含gl.h或glu.h。
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)本文中的一切译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。 2KB翻译Task依照 CC 协议,假设我们的Task有侵犯到您的权益,请及时联系我们。
2KB项目(www.2kb.com,源码交易平台),供给担保交易、源码交易、虚拟商品、在家创业、在线创业、Task交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接生意、网站交易、广告生意、站长培训、建站美工等服务