OpenGL概述

OpenGL简介

OpenGL是图形硬件的一种软件接口。它被设计为硬件独立的接口,可用于多种不一样硬件平台。OpenGL程序也能够在网络(客户端-服务器端模式)上工做,即便客户端与服务器端为不一样类别的计算机。OpenGL的客户端为OpenGL程序实际运行的计算机,服务器为执行绘图操做的计算机。html

OpenGL使用gl做为OpenGL核心命令的的前缀,glu做为OpenGL通用库的前缀。相似地,OpenGL常量以GL_开头,且所有使用大小字母。OpenGL也使用后缀指定传递给OpenGL的参数数量与数据类型。缓存

glColor3f(1, 0, 0);           // 使用3个浮点数据设置显示颜色为红色
glColor4d(0, 1, 0, 0.2);      // 设置颜色为带有20%不透明度的绿色(double)
glVertex3fv(vertex);          // 使用指针设置x-y-z坐标值

 状态机

OpenGL是一个状态机。OpenGL的模式与属性都在下次更改以前一直有效。绝大部分状态变量能够经过glEnable()与glDisable()开启与关闭。你也可使用glIsEnabled()检测一个状态当前是否被开启或关闭。经过glPushAttrib()或glPopAttrib(),你能够保存一组状态到属性栈,或从属性栈中恢复。GL_ALL_ATTRIB_BITS参数用于保存/恢复全部状态。标准OpenGL中必须至少有16个栈。(使用glinfo检测栈的最大数量。)服务器

glPushAttrib(GL_LIGHTING_BIT);    // 更改状态的简单方式
    glDisable(GL_LIGHTING);       // 由于在调用glPopAttrib()以后可以正好恢复上一次状态
    glEnable(GL_COLOR_MATERIAL);
glPushAttrib(GL_COLOR_BUFFER_BIT);
    glDisable(GL_DITHER);
    glEnable(GL_BLEND);

... // 其余

glPopAttrib();                    // 恢复GL_COLOR_BUFFER_BIT
glPopAttrib();                    // 恢复GL_LIGHTING_BIT

glBegin()与glEnd()

为了在OpenGL中绘制几何图元(点、线、三角形等),你能够在glBegin()与glEnd()中指定定点数据列表。该方式为当即模式。(你可使用其余方式绘制几何图元,如顶点列表。)网络

glBegin(GL_TRIANGLES);
    glColor3f(1, 0, 0);     // 设置颜色为红色
    glVertex3fv(v1);        // 使用v一、v二、v3绘制三角形
    glVertex3fv(v2);
    glVertex3fv(v3);
glEnd();

OpenGL中有10中图元:GL_POINTS、GL_LINES、GL_LINE_STRIP、GL_LINE_LOOP、GL_TRIANGLE_STRIP、GL_TRIANGLE_FAN、GL_QUADS、GL_QUAD_STRIP与GL_POLYGON。spa

注意,并非全部OpenGL命令都可以放在glBegin()与glEnd()中。仅仅可以使用这些命令的一小部分:glVertex*()、glColor*()、glNormal*()、glTexCoord*()、glMaterial*()、glCallList()等。设计

glFlush()与glFinish()

相似IO缓冲操做,OpenGL命令并非当即执行的。全部命令首先存放在缓存中,包括网络缓存与显卡加速器自己,而且在缓存未满以前一直等待执行。例如,若是应用程序在网络上运行,以单个数据包形式发送命令集合比每次在网络中发送一条命令更高效。指针

glFlush()清空缓存中全部命令,而且强制全部挂起命令当即执行而没必要等待缓存满。所以,glFlush()确保在调用glFlush()后的有限时间内执行全部调用点以前的OpenGL命令。glFlush()并不等待先前命令执行完成,且当即返回到主程序。所以,即便先前发送的命令并未执行完成,你也能够自由发送更多命令。orm

glFinish()与glFlush()相似,清空缓存区且强制开始执行命令。不一样的是,glFinish()阻塞其余OpenGL命令,且等待全部执行结束。所以,glFinish()在先前调用的命令完成以前并不会返回到主程序中。它可用于同步任务,或用于测量特定OpenGL命令的执行时间。htm

 

原文地址:http://www.songho.ca/opengl/gl_overview.htmlblog

相关文章
相关标签/搜索