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