OpenGL介绍

合集下载

OPENGL简介

OPENGL简介

OpenGL 的特点
从程序开发人员的角度来看,OpenGL是一组绘图命令 的API(Application Program Interface,应用程序接口)集合。 利用这些API能够方便地描述二维和三维几何物体,并 控制这些物体按某种方式绘制到显示缓冲区中。 OpenGL的API集提供了物体描述、平移、旋转、缩放、 光照、纹理、材质、象素、位图、文字、交互以及提 高显示性能等方面的功能,基本涵盖了开发二、三维 图形程序所需的各个方面。与一般的图形开发工具相 比,OpenGL具有以下几个突出特点: 应用广泛 跨平台性 高质量和高性能 出色的编程特性 网络透明性
OpenGL程序结构 ---------------------程序的基本结构
OpenGL程序的基本结构可分为三个部分:


第一部分是初始化部分。主要是设置一些OpenGL的状态开关,如颜色模式 (RGBA或ALPHA)的选择,是否作光照处理(若有的话,还需设置光源的特性),深 度检验,裁剪等等。这些状态一般都用函数glEnable(???), glDisable(???)来设置,??? 表示特定的状态。 第二部分设置观察坐标系下的取景模式和取景框位置大小。主要利用了三个函数:
函数void glViewport(left,top,right,bottom):设置在屏幕上的窗口大小,四个参数描述屏 幕窗口四个角上的坐标(以象素表示);
函数void glOrtho(left,right,bottom,top,near,far):设置投影方式为正交投影(平行投 影),其取景体积是一个各面均为矩形的六面体; 函数void gluPerspective(fovy,aspect,zNear,zFar):设置投影方式为透视投影,其取景 体积是一个截头锥体。

OpenGL简介

OpenGL简介

OpenGL简介(),Open Graphics Library,开放图形库,是跨语⾔、跨平台的3D图形编程接⼝。

OpenGL使⽤客户端 - 服务器架构设计,应⽤程序为客户端,图形硬件设备为服务器。

客户端负责提交OpenGL命令,服务器执⾏这些命令并渲染出图像。

OpenGL是⼀个状态机,每个状态都有⼀个默认值。

开发者可以设置这些状态,然后让它们⼀直⽣效,直到再次修改它们。

例如:当前颜⾊就是⼀个状态变量,可以把其设置成红⾊,那么在此之后绘制的所有物体都会使⽤这种颜⾊,直到再次把当前颜⾊设置为其他颜⾊。

OpenGL的API可通过软件模拟实现,⾼效实现依赖于显⽰设备⼚商提供的硬件加速。

注:开源()是⼀个纯软件模拟实现的图形API,其代码兼容于OpenGL。

OpenGL规范⽬前由⾮盈利组织()的架构评审委员会(Architecture Review Board,ARB)维护。

ARB主要由操作系统⼚商(Apple Computer、Microsoft【2003.3已退出】等)、图形硬件⼚商(3Dlabs、SGI、NVIDIA、ATI Technologies、Intel等)、技术公司(Mozilla、Google等)和国际3D组织组成。

OpenGL是⼀个不断进化的API,在OpenGL1.2.1版本引⼊扩展(extension)的概念。

OpenGL新版本会定期由Khronos Group发布。

①增加新的扩展API(引⼊新函数和新常量)来增加新功能②放松或取消现有扩展API的限制来增强功能⼀个扩展由两部分组成:包含扩展函数原型的头⽂件和⼚商的设备驱动实现ARB扩展:标准扩展。

由架构评审委员ARB批准发布。

第⼀个ARB扩展是GL_ARB_multitexture(注:在OpenGL1.3中加⼊)。

所有ARB 扩展可从查询。

GL_ARB_multitexture扩展中新增了包含glActiveTextureARB、glClientActiveTextureARB、glMultiTexCoord*ARB函数,共34个。

OpenGL简介资料

OpenGL简介资料

建模 OpenGL图形库除了提供基本的点、线、多边 形的绘制函数外,还提供了复杂的三维物体 (球、锥、多面体、茶壶等)以及复杂曲线和 曲面(例如Bezier、Nurbs等曲线或曲面)绘 制函数。
OpenGL功能(二)

变换 OpenGL图形库的变换包括基本变换和投影变 换。基本变换有平移、旋转、缩放、镜像四种 变换,投影变换有平行投影(又称正交投影) 和透视投影两种变换。
OpenGL功能(三)

颜色模式设置 OpenGL颜色模式有两种,即RGBA模式和颜 色索引(Color Index)。
OpenGL功能(四)

光照和材质设置 OpenGL光有辐射光(Emitted Light)、环 境光(Ambient Light)、漫反射光(Diffuse Light)和镜面光(Specular Light)。材质 是用光反射率来表示。场景(Scene)中物体 最终反映到人眼的颜色是光的红绿蓝分量与材 质红绿蓝分量的反射率相乘后形成的颜色。
OpenGL功能(五)

纹理映射(Texture Mapping) 利用OpenGL纹理映射功能可以十分逼真地表 达物体表面细节。
OpenGL功能(六)

位图显示和图象增强 图象功能除了基本的拷贝和像素读写外,还提 供融合(Blending)、反走样(Antialiasing) 和雾(fog)的特殊图象效果处理。以上三条 可使被仿真物更具真实感,增强图形显示的效 果。
用OpenGL编写程序的基本模板
//主函数
int main(int argc, char* argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); //设置显示模式(颜色、缓冲区等) glutCreateWindow(“A Simple Example”); //创建窗口 SetupRC(); //初始化渲染环境 glutDisplayFunc(RenderScene); //调用场景渲染函数 glutReshapeFunc(ChangeSize); //窗口发生变化 glutMainLoop(); //程序开始事件处理 }

OpenGL与DirectX说明

OpenGL与DirectX说明

OpenGL与DirectX说明(参照着有一个对比)1、OpenGL即开放性图形开发库,OpenGL是国际上公认的3D图形工业标准,它不仅加速了3D应用程序的开发,而且使应用程序可移植性更好。

随着OpenGL在Unix与PC平台的广泛应用,越来越多的3D应用程序采用OpenGL作为支撑库。

但是在开发交互式3D应用程序方面,OpenGL存在明显的不足。

1)OpenGL与窗口系统无关,不提供任何交互手段,必须有程序员自己编写所有的交互功能。

2)OpenGL编程接口(API)是低级的C函数,不提供可复用(Reuse)的对象库或者应用程序框架,开发效率不高。

3)缺乏对文字绘制的很好支持。

2、DirectX是一种图形应用程序接口,简单地说它是一个辅助软件,一个提高系统性能的加速软件,由微软开发的。

Direct是直接的意思,X是很多东西,加在一起就是一组具有很多共性的东西,从内部原理探讨,DirectX是一系列的动态链接库DLL——COM (component object model)对象,通过这些COM对象,开发者可以在无视设备差异的情况下访问底层的硬件,可以在隐藏特定硬件细节的情况下让程序员去访问硬件设备,微软称之为“硬件无关性”。

DirectX包括图形、声音、网络连接、所有的都融合在一个标准接口之中,且每一个都能脱离其他独自使用。

DirectX Graphics:这是处理图形输入的部分,包含所有的二维的DirectDraw、三维和动画的Direct3D的API,提供绘制2D和3D图形的函数句柄。

它能够优化解析度设定和其他图形方面的内容,如:①支持双缓冲和换页图形。

②访问、控制显示卡的位图映射。

③支持3D z-buffers(z缓冲)。

④支持z方向(z-ordering)硬件辅助覆盖。

⑤访问图形缩放硬件。

⑥仿真访问标准的和增强的显示设备内存空间。

DirectInput:所有的用户输入都被此API解析和处理,它支持键盘、鼠标、手柄、摇杆……以及最新的技术——力反馈。

opengl面试题

opengl面试题

opengl面试题OpenGL(Open Graphics Library)是一种跨平台的图形程序接口,被广泛应用于计算机图形学、游戏开发和虚拟现实等领域。

在面试中,对于应聘者来说,熟悉和掌握OpenGL相关知识是非常重要的。

本文将针对OpenGL面试题,从基础知识到高级概念进行详细讲解。

一、OpenGL基础知识1. 什么是OpenGL?OpenGL是一种开放的、跨平台的图形程序接口,由一系列函数库组成,用于渲染2D和3D图形。

它提供了丰富的绘图函数和状态管理函数,可以用于创建和操控渲染管线,实现图形的绘制、变换、光照等操作。

2. OpenGL的版本有哪些?它们之间有何区别?OpenGL的版本包括OpenGL 1.0、OpenGL 2.0、OpenGL 3.0、OpenGL 4.0等。

每个版本都有自己特定的功能和特性,新版本通常会引入更强大的功能和更高效的实现方式。

主要的区别在于对硬件和图形特性的支持程度上有所不同。

3. 什么是渲染管线?渲染管线是OpenGL中的一个重要概念,它描述了图形的处理过程。

渲染管线包括几个阶段,如顶点处理、光栅化、片段处理等。

每个阶段都有特定的功能和输入输出。

熟悉渲染管线的工作原理是理解OpenGL的关键。

4. 什么是顶点缓冲对象(VBO)?顶点缓冲对象是OpenGL中用于存储顶点数据的缓冲区。

通过创建和绑定VBO,可以将顶点数据传输到显存中,从而提高渲染效率。

VBO可以存储顶点的位置、颜色、纹理坐标等信息。

二、OpenGL高级概念1. 什么是着色器(Shader)?着色器是OpenGL中用于控制图形渲染过程的程序。

着色器分为顶点着色器(Vertex Shader)和片段着色器(Fragment Shader)。

顶点着色器用于处理顶点相关计算,如位置变换、法线变换等;片段着色器用于处理每个像素的光照、纹理采样等操作。

2. 什么是纹理(Texture)?纹理是二维图像的映射,可以应用到模型的表面上。

OpenGL 简介

OpenGL 简介

OpenGL使用
GLUT ( OpenGL Utility Toolkit ) 安装:在windows下通过 C/C++语言编写 GLUT 程序, 需要以下三个文件:
举例:在window XP下使用VC6安装GLUT
– – – –
– GLUT.H - 需要源代码中包含这个文件。通常情况下,这个文件 应该放在系统的包含目录下的 GL 文件夹中。 – GLUT.LIB (SGI windows版本) 以及 glut32.lib (微软版本) - 这 个文件必须被连接到程序中, 确保它放在 LIB 目录中。 – glut32.dll (Windows) 和 glut.dll (SGI Windows版本) - 根据所 使用的OpenGL选择一个,如果正在使用微软公司的版本,那么 必须选择 glut32.dll。应该把DLL放置在系统文件夹中。
OpenGL使用
void main(int argc,char** argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowPosition(50,100); glutInitWindowSize(400,300); glutCreateWindow(“An Example OpenGL Program.”); init(); glutDisplayFunc(lineSegment); glutMainLoop(); }
OpenGL使用
OpenGL使用
OpenGL使用
#include <GL/glut.h> void renderScene(void) { //绘制一个简单的二维的三角形 glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_TRIANGLES); glVertex3f(-0.5,-0.5,0.0); glVertex3f(0.5,0.0,0.0); glVertex3f(0.0,0.5,0.0); glEnd(); glFlush(); } void main(int argc, char **argv) { glutInit(&argc, argv); //初始化glut glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA); //设置窗口的模式-深度缓存,单缓存,颜色模型 glutInitWindowPosition(100,100); //设置窗口的位置 glutInitWindowSize(320,320); //设置窗口的大小 glutCreateWindow(“3D Tech- GLUT Tutorial”); //创建窗口并赋予title glutDisplayFunc(renderScene);//调用renderScene把绘制传送到窗口 glutMainLoop(); //进入循环等待

OpenGL介绍

OpenGL介绍
OpenGL实用库
glaux.h: OpenGL扩展库 glut.h: OpenGL实用工具包 #include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glaux.h> #include <GL/glut.h>
此外,OpenGL还提供了反走样技术,能够实现深度暗示(Depth Cue)、运动模糊(Motion Blur)、雾化(Fog)等特殊效果。
6.1.3 OpenGL的绘制流程和原理
点数据 评价器 逐点操作 基元匹配 基片 操作
显示 列表
像素 数据 像素操作
光栅化
帧缓冲区
纹理存储器
OpenGL指令从左侧进入OpenGL,有两类数据,分别是由顶点描述的几何模 型和由像素描述的位图、影像等模型,其中后者经过像素操作后直接进入光栅 化。评价器(Evaluator)用于处理输入的模型数据,例如对顶点进行转换、光照, 并把图元剪切到视景体中,为下一步光栅化做好准备。显示列表(Display List) 用于存储一部分指令,留待合适时间以便于快速处理。光栅化将图元转化成二 维操作,并计算结果图像中每个点的颜色和深度等信息,产生一系列图像的帧 缓存描述值,其生成结果称为基片(Fragment)。基片操作主要的有帧缓存的更 新、测试、融合和屏蔽操作,以及基片之间的逻辑操作和抖动(Dithering)。
第6章 OpenGL
6.1 基本介绍
6.1.1 背景情况
OpenGL(Open Graphics Library,即开放性图形库)是以SGI的 GL三维图形库为基础制定的一个开放式三维图形标准。SGI在 1992年7月发布了1.0版。 OpenGL 规 范 由 ARB(OpenGL Architecture Review Board, OpenGL结构评审委员会)负责管理,目前加入OpenGL ARB的 成员有SGI、Microsoft、Intel、IBM、SUN、Compaq、HP等公 司,它们均采用了OpenGL图形标准,许多软件厂商以OpenGL 为基础开发自己的产品,硬件厂商提供对OpenGL的支持。由 于OpenGL的广泛应用,它已经成为一个工业标准。

OPENGL简介

OPENGL简介

Mode 的值 GL_POINTS GL_LINES GL_POLYGON GL_TRIANGLES
解释 一系列独立的点 每两点相连成为线段 简单,凸多边形的边界 三点相连成为一个三角形
GL_QUADS
四点相连成为一个四边形
OPENGL 简 介
例如,下列程序定义如左图所示的图形。 glBegin(GL_POLYGON); glVertex2f(0.0,0.0); glVertex2f(0.0,3.0); glVertex2f(3.0,3.0) glVertex2f(4.0,1.5); glVertex2f(3.0,0.0); glEnd();
行光照处理时,法向量是一项重要的参数,因为法向 量决定了该对象可以接收多少光照。 指定法向量 void glNormal3{bsidf}(TYPE nx,TYPE ny,TYPE nz); void glNormal3{bsidf}v(const TYPE* v);
OPENGL 简 介
OpenGL特点
➢ 应用广泛 ➢ 跨平台性 ➢ 高质量和高性能 ➢ 出色的编程特性
OPENGL 简 介
OpenGL的工作顺序
➢ 构造几何要素,创建对象的数学描述。在三维 空间上放置对象,选择有利的场景观察点。 ➢ 计算对象的颜色,这些颜色可能直接定义,或 由光照条件及纹理间接给出。 ➢ 光栅化,把对象的数学描述和颜色信息转换到 屏幕的象素。
OPENGL 简 介
➢ OpenGL的主要部分 使用OpenGL的库函数构造几何物体对象的数学描述,
包括点线面的位置和拓扑关系、几何变换、光照处理 等等。
4. OpenGL简单程序框架说明
OPENGL 简 介
OpenGL基本几何结构
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第二步:添加头文件 在项目工作区的FileView中找到StdAfx.h,添加下面的代码: #include <GL/gl.h> #include <GL/glu.h> #include &l++中,修改视图类成员函数代码实现 OpenGL绘图的过程如下:
➢纹理映射(Texture Mapping): 将真实感的纹理粘贴在物体表面, 使物体逼真生动。纹理是数据的简单矩阵排列,数据有颜色数据 、亮度数据和alpha数据。 ➢位图和图像:提供了一系列函数来实现位图和图像的操作。位 图和图像数据均采用像素的矩阵形式表示。
➢制作动画:提供了双缓存(Double Buffering)技术来实现动画绘制。 双缓存即前台缓存和后台缓存,后台缓存用来计算场景、生成画 面,前台缓存用来显示后台缓存已经画好的画面。当画完一帧时, 交互两个缓存,这样循环交替以产生平滑动画。
➢选择和反馈:OpenGL为支持交互式应用程序设计了选择操作模 式和反馈模式。在选择模式下,则可以确定用户鼠标指定或拾取 的是哪一个物体,可以决定将把哪些图元绘入窗口的某个区域。 而反馈模式,OpenGL把即将光栅化的图元信息反馈给应用程序, 而不是用于绘图。
此外,OpenGL还提供了反走样技术,能够实现深度暗示(Depth Cue)、运动模糊(Motion Blur)、雾化(Fog)等特殊效果。
➢ 特 别 需 要 指 出 的 是 , 由 于 Microsoft 公 司 在 其 Windows95或更高版本的操作系统和Visual系列高级 语 言 开 发 环 境 中 捆 绑 了 OpenGL 标 准 , 使 得 OpenGL 在微机中得到了更为普遍的应用。
➢ OpenGL可以与各种编程语言紧密接口。各种流 行的编程语言如C、C++、Fortran、Ada、Java等 都可以调用OpenGL中的库函数。
➢着色模式:提供了RGBA模式和颜色索引两种颜色的显示方式。
➢光照处理:在自然界我们所见到的物体都是由其材质和光照相互 作 用 的 结 果 , OpenGL 提 供 了 辐 射 光 (Emitted Light) 、 环 境 光 (Ambient Light)、漫反射光(Diffuse Light)和镜面光(Specular Light)。 材质是指物体表面对光的反射特性,在OpenGL中用光的反射率来 表示材质。
维操作,并计算结果图像中每个点的颜色和深度等信息,产生一系列图像的帧 缓存描述值,其生成结果称为基片(Fragment)。基片操作主要的有帧缓存的更 新、测试、融合和屏蔽操作,以及基片之间的逻辑操作和抖动(Dithering)。
2.3.4 VC++开发OpenGL绘图程序
第一步:向项目文件中添加OpenGL的绘图函数 Project || Settings || Link在Object/library modules:中输入 opengl32.lib glu32.lib glaux.lib
➢ 由于OpenGL的广泛应用,它已经成为一个工业标准。
➢ OpenGL独立于硬件设备、窗口系统和操作系统, 使得以OpenGL为基础开发的应用程序可以在各 种平台间移植。
➢ OpenGL可以运行在当前各种流行操作系统之上,如 Windows95/98、Windows NT/2000、Linux、Mac OS、 Unix、OS/2等。
2.3 OpenGL介绍
➢2.3.1 背景
OpenGL(Open Graphics Library,开放式图形库) ➢是以SGI的GL三维图形库为基础制定的一个开放式三维 图形标准。SGI在1992年7月发布了1.0版。
➢ OpenGL 规 范 由 ARB(OpenGL Architecture Review Board , OpenGL结构评审委员会)负责管理,目前加入OpenGL ARB的 成员有SGI、Microsoft、Intel、IBM、SUN、Compaq、HP等公 司 , 它 们 均 采 用 了 OpenGL 图 形 标 准 , 许 多 软 件 厂 商 以 OpenGL为基础开发自己的产品,硬件厂商提供对OpenGL的 支持。
2.3.3 OpenGL的绘制流程和原理
点数据
像素 数据
显示 列表
评价器
逐点操作 基元匹配
像素操作
光栅化
基片 操作
帧缓冲区
纹理存储器
OpenGL指令从左侧进入OpenGL,有两类数据,分别是由顶点描述的几何模 型和由像素描述的位图、影像等模型,其中后者经过像素操作后直接进入光栅 化。评价器(Evaluator)用于处理输入的模型数据,例如对顶点进行转换、光照, 并把图元剪切到视景体中,为下一步光栅化做好准备。显示列表(Display List) 用于存储一部分指令,留待合适时间以便于快速处理。光栅化将图元转化成二
具体添加代码如下:
//首先定义像素存储格式
PIXELFORMATDESCRIPTOR pfd=
①改造PreCreateWindow函数:将窗口的客户区设置为OpenGL 能够支持的风格。具体添加代码如下:
cs.style|=WS_CLIPCHILDREN|WS_CLIPSIBLINGS;
②在视图类,添加一个成员变量HGLRC m_hRC ;
然后改造 OnCreate函数:定义像素存储格式, 并创建一个 OpenGL操作所必须的绘图上下文RC(Rendering Context)。使 用 一 个 PIXELFORMATDESCRIPTOR 结 构 来 指 定 像 素 格 式 , 使用wglCreateContext()函数创建绘图上下文RC。
2.3.2 OpenGL的主要功能
➢绘制模型:提供了绘制点、线、多边形、球、锥、多面体、茶壶 等复杂的三维物体以及贝塞尔、NURBS等复杂曲线或曲面的绘制 函数。
➢各种变换:提供了平移、旋转、变比和镜像四种基本变换以及平 行投影和透视投影两种投影变换。通过变换实现三维的物体在二 维的显示设备上显示。
相关文档
最新文档