OpenGL简介

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

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); // 使用v1、v2、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。

注意,并不是所有OpenGL命令都能够放在glBegin()与glEnd()中。仅仅能够使用这些命令的一小部分:glVertex*()、glColor*()、glNormal*()、glTexCoord*()、glMaterial*()、glCallList()等。

glFlush()与glFinish()

类似IO缓冲操作,OpenGL命令并不是立即执行的。所有命令首先存放在缓存中,包括网络缓存与显卡加速器本身,并且在缓存未满之前一直等待执行。例如,如果应用程序在网络上运行,以单个数据包形式发送命令集合比每次在网络中发送一条命令更高效。

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

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

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

OpenGL概述的更多相关文章

  1. [OpenGL红宝书]第一章 OpenGL概述

    第一章 OpenGL概述 标签(空格分隔): OpenGL 第一章 OpenGL概述 1 什么是OpenGL 2 初识OpenGL程序 3 OpenGL语法 4 OpenGL渲染管线 41 准备向Op ...

  2. 【转】OpenGL概述

    英文原文 中文译文 1. 计算机图像硬件 1.1 GPU(图像处理单元) 如今,计算机拥有用来专门做图像处理显示的GPU模块,拥有独立的图像处理储存(显存). 1.2 像素和画面 任何图像显示都是基于 ...

  3. [OpenGL]VS2010配置OpenGL开发环境

    opengl概述 OpenGL(Open Graphics Library)是一个跨编程语言.跨平台的专业图形程序接口. OpenGL是SGI公司开发的一套计算机图形处理系统,是图形硬件的软件接口,任 ...

  4. [转]CUDA和OpenGL互操作的实现及分析

    CUDA和OpenGL互操作的实现及分析刘进锋.郭雷(西北工业大学 自动化学院,陕西西安710129) 1 CUDA与OpenGL概述 OpenGL是图形硬件的软件接口,它是在SGI等多家世界著名的计 ...

  5. openGL学习进程(1)OpenGL的简介

        通过本节,我们来简要了解一下openGL.     (1)OpenGL概述: openGL(Open Graphics Library)是个专业的图形程序接口,定义了一个跨编程语言.跨平台的编 ...

  6. OpenGL官方教程——着色器语言概述

    OpenGL官方教程——着色器语言概述 OpenGL官方教程——着色器语言概述 可编程图形硬件管线(流水线) 可编程顶点处理器 可编程几何处理器 可编程片元处理器 语言 可编程图形硬件管线(流水线) ...

  7. 【转】OPENGL基本API概述

    本文信息资源来源于网络,欢迎转载!转载时请保留本文链接(http://www.shopliyang.com.cn/)! OpenGL中的gl库是核心库,glu是实用库,glut是实用工具库. gl是核 ...

  8. OpenGL实现通用GPU计算概述

    可能比較早一点做GPU计算的开发者会对OpenGL做通用GPU计算,随着GPU计算技术的兴起,越来越多的技术出现,比方OpenCL.CUDA.OpenAcc等,这些都是专门用来做并行计算的标准或者说接 ...

  9. 【OpenGL】Shader概述

    目录(?)[-] 综述 编译一个Shader 链接一个Shader 删除一个Shader 指定使用一个Shader Program 删除一个Shader Program 备注 这篇文章讲述了Shade ...

随机推荐

  1. 在caffe中使用hdf5的数据

    caffe默认使用的数据格式为lmdb文件格式,它提供了把图片转为lmdb文件格式的小程序,但是呢,我的数据为一维的数据,我也要分类啊,那我怎么办?肯定有办法可以转为lmdb文件格式的,我也看了一些源 ...

  2. NPM 使用介绍

    NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种: 允许用户从NPM服务器下载别人编写的第三方包到本地使用. 允许用户从NPM服务器下载并 ...

  3. Linux中关于安装包的分析。——Arvin

    初接解LINUX的,同样都是for linux,但rpm.tar.gz.deb包还是有很大区别的,这种区别可使安装过程进行不下去.那我们应该下载什么格式的包呢? rpm包-在红帽LINUX.SUSE. ...

  4. stm32cube--串口

    1.printf函数重定向 ①以stm32f103rct6的usart1为例,打开cube,配置好RCC和USART1,生成mdk程序. ②打开工程,在main.c中 /* USER CODE BEG ...

  5. linux笔记:用户和用户组管理-用户管理命令

    useradd(添加用户.在使用useradd添加一个用户后,必须使用passwd给该用户设置密码,该用户才能登陆): passwd(设置或修改用户密码): usermod(修改用户信息): chag ...

  6. jquery导航栏

    html <ul class="list"> <li>下拉菜单 <ul class="nav"> <li>下拉菜 ...

  7. div被object覆盖的解决办法

    代码: <div id="contextmenu" style="width: 120px; height:120px;DISPLAY: none; top: 26 ...

  8. CSS3制作漂亮的照片墙

    CSS3可以做动画大家肯定都是耳熟能详的了,但是大家有木有巧妙的利用这一个功能来制作一款漂亮的照片墙呢? 那么今天我们就利用CSS3动画这一特性来一起制作漂亮的照片墙吧! 第一部分:HTML 这里我们 ...

  9. .net中大数据的处理

    前提:sqlserver数据库 问题:需要从数据量达千万级或是更大的数据库中找出一条需要的数据. 1,先分析大数据的结构,以及数据的流向.以及此过程中那些地方会有瓶颈. 2,针对瓶颈制定方案: 1.1 ...

  10. eventUtil

    var eventUtil = { // 添加句柄 addHandler: function(element, type, handler) { if(element.addEventListener ...