《OPENGL三维图形程序设计》系列讲座 OPENGL基本编程
Windows 下一般已经带上了 OpenGL 的 opengl32. dll 动态连接库, 读者可在 windows 目录下的 SYSTEM 32 子目录中查到。但是一般没有直接带 glu32. dll、 glut32.dll、glut.dll 等。必须再单独将这些动 态链接库入 Windows 目录下 的 SYSTEM32 子目录中去。
myReshape 是一个函数指针。这个函数带有两个参数, 即窗口改变后的新宽度和
新高度。
◇auxMainLoop() 循环绘制场景, 参数 myDisplay 即为场景绘制函数。当窗
口需要更新或场景发生改变时, 程序便调用 myDisplay, 更新绘制场景。
二、创建基于 MFC 的 OpenGL 单文档应用程序 限于篇幅,有关详细内容请参考有关书籍。这里只归纳总结一下利用 VC 的
{
glViewport(0,0,w,h);
// 设置窗口缩放时的视口变换
}
int main(int argc, char* argv[])
{
auxInitDisplayMode(AUX_SINGLE | AUX_RGBA); //初始化显示模式
auxInitPosition(0,0,400,400);
int pixelFormat=ChoosePixelFormat(dc.m_hDC,&pfd);//选择像素格式
BOOL success=SetPixelFormat(dc.m_hDC,pixelFormat,&pfd);// 设 置 像 素
格式
//创建绘图上下文 RC
m_hRC=wglCreateContext(dc.m_hDC);
wglMakeCurrent(NULL,NULL); wglDeleteContext(m_hRC);//删除渲染上下文 m_hRC ⑥改造 OnDraw:根据当前的视点、视距、观看方向等参数,设置合适的 OpenGL 视景体属性,使用户能够看到预期的场景外观。添加的代码如下:
wglMakeCurrent(pDC->m_hDC,m_hRC);
并且图形缓存为单缓存(SINGLE BUFFER)。
◇auxInitPosition () 定义窗口的初始位置, 前两个参数(0, 0) 为窗口的左上
角点的屏幕坐标, 后两个参数(500, 500) 为窗口的宽度和高度。
◇auxInitWindow ()窗口初始化,字符参数是窗口名称。
◇ auxReshapeFunc() 窗 口 大 小 改 变 时 重 新 定 义 场 景 形 状 尺 寸 。 参 数
0,0,0,0, //accum bits ignored
32, //32 位 z 缓冲
0, //不使用模板缓存
0, //no auxiliary buffer
PFD_MAIN_PLANE,
//选择主层面
0, //保留
0,0,0 //layer masks ignored
};
CClientDC dc(this);//创建设备环境类对象 dc
③改造 OnSize 函数:当视图尺寸变化是,应及时将新的客户区尺寸通知 OpenGL, 方能够正确在窗口客户区域显示二维场景,通过命令 glViewPort 完成这项工作。 ④改造 OnEraseBkgnd 函数:重载视图类的 OnEraseBkgnd 成员,使之返回 TRUE 值可以阻止 Windows 重画窗口背景,因为 OpenGL 自己会设置窗口背景,这样 可以防止窗口频繁刷新(如移动窗口)时产生的闪烁现象。 ⑤改造 OnDestroy 函数:在 OnDestroy 成员中需要释放 OnCreate 成员中 RC 所 占用的资源,命令 wglDeleteContext 可以完成这个工作,但在释放 RC 之前,还 需要使用命令 wglMakeCurrent()断开 RC 与设备描述表 DC 的连接。具体代码如 下:
cs.style=WS_CLIPCHILDREN|WS_CLIPSIBLINGS; ②改造 OnCreate 函数:定义像素存储格式,并创建一个 OpenGL 操作所必须的 绘图上下文 RC(Rendering Context)。使用一个 PIXELFORMATDESCRIPTOR 结 构来指定像素格式,使用 wglCreateContext()函数创建绘图上下文 RC。
将头文件<gl.h >、< glu. h>、< glut. h>和< glaux. h>拷贝到 VC 的 include 子目录下。
1. 3 OpenGL 简单例程举例 创建一个基于控制台的应用程序 首先运用 OpenGL 辅助库的窗口管理功能来讲解一个简单的 OpenGL 图
形应用实例, 这个例程创建一个基于控制台的应用程序,在窗口绘制一个线框球。 // Console.cpp : Defines the entry point for the console application. #include "stdafx.h" #pragma warning(disable : 4305) #include <windows.h> //添加 OpenGL 头文件 #include <GL/gl.h> #include <GL/glu.h> #include <GL/glaux.h> //定义用户函数及回调函数 void myInit(void); void CALLBACK myReshape(GLsizei w,GLsizei h); void CALLBACK myDisplay(void);
DrawScene(); //用户自定义函数,用来编写 OpenGL 绘制语句的 wglMakeCurrent(pDC->m_hDC,NULL);// 使 m_hRC 为非现行的绘图上下文 在 DrawScene( )函数中编写具体的绘图程序。首先需要设置视点、视距和观看方 向等场景参数,然后绘制图元。
//窗口显示位置
auxInitWindow("My First Console OpenGL Application"); //窗口标题
myInit();
auxReshapeFunc(myReshape);
auxMainLoop(myDisplay);
return 0;
}
◇auxInitDisplayMode( ) 设置窗口显示模式为 RGBA 方式, 即彩色方式,
void myInit(void) {
glClearColor(0.0,0.0,0.0,0.0); //背景清除颜色 glShadeModel(GL_FLAT); //图形绘制模式 }
void CALLBACK myDisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT);
在 VC 下添加 OpenGL 静态链接库: opengl32.lib、glu32.lib、 glaux.lib、 glut32.lib。
将动态链接库文件 opengl32.dll、GLUT.dll、GLUT32.dll、GLU.dll 拷贝到 系统的"Windows(或 WinNT)\system32\"目录下。
MFC 类库使 penGL 与 Windows 接口的基本方法和步骤, 并举出一个完整的例 子。
2. 1Windows 下的 OpenGL 函数 W indows 下的 OpenGL 包含 200 多个库函数, 这些函数都按一定的格式来 命名, 即每个函数都以 gl 开头。Windows 下的 OpenGL 除了具有基本的 OpenGL 函数外, 还支持其他两类函数: (1) W indows 专用库函数(WGL ) : 6 个函数, 每个函数以 wgl 开头; (2) W in32 AP I 函数: 5 个函数, 函数前面没有专用前缀; 6 个 WGL 函数用于连接 OpenGL 和 W indows。这些函数用于 Windows 环境下的 OpenGL 窗口能够进行渲染着色, 在窗口内绘制位图字体以及把文本 放在窗口的某一位置等。这些函数把 W indows 和 OpenGL 揉合在一起; 最后的 5 个 Win32 函数用于处理象素存储格式和双缓存, 显然这些函数仅仅能够用于 W in32 系统而不能用于其他 OpenGL 平台。 2. 2 OpenGL for W indows 程序设计基本步骤 下面通过一个例子具体讲述利用 VC 的 MFC 类库编写 OpenGL for W indows 的基本步骤: ①改造 PreCreateWindow 函数:将窗口的客户区设置为 OpenGL 能够支持的风 格。具体添加代码如下:
OpenGL 基础知识
1 OpenGL 函数库及简单例程
1. 1OpenGL 函数库 OpenGL 是一个针对图形硬件的软件接口(Software Interface)。它包括 200
多个图形操作函数, 分属于三个基本图形库, 即基础库、实用库、辅助库。OpenGL 基础库是 OpenGL 最底层的图形函数库, 它提供大量的几何图原和图象单元的 操作, 约含 115 个函数, 函数前缀为 gl, 列于头文件<gl.h > 中; OpenGL 实用库 ( the OpenGL Utility Library, GLU ) 是在基础库上开发的高级实用函数库, 它提 供更方便的纹理映射、坐标变换和复杂三维物体建模的调用, 约含 43 个函数, 前 缀 为 glu, 列 于 头 文 件 < glu. h> 中 ;OpenGL 辅 助 库 ( the OpenGL Auxiliary Library,AUX) 是为 OpenGL 编程初学者提供的一系列窗口管理、输入输出及三 维复杂物体绘制的特殊函数库, 因 OpenGL 本身并不带窗口系统, 也不提供复杂 场景绘制功能, 因此提供辅助库便于快速入门,正式应用时可不用这些函数, 而 直接在所用窗口系统下实现这些功能, 辅助库约含 31 个函数, 前缀为 aux, 列于 头文件< aux. h> 中。 1. 2 基本接口编程
myReshape 是一个函数指针。这个函数带有两个参数, 即窗口改变后的新宽度和
新高度。
◇auxMainLoop() 循环绘制场景, 参数 myDisplay 即为场景绘制函数。当窗
口需要更新或场景发生改变时, 程序便调用 myDisplay, 更新绘制场景。
二、创建基于 MFC 的 OpenGL 单文档应用程序 限于篇幅,有关详细内容请参考有关书籍。这里只归纳总结一下利用 VC 的
{
glViewport(0,0,w,h);
// 设置窗口缩放时的视口变换
}
int main(int argc, char* argv[])
{
auxInitDisplayMode(AUX_SINGLE | AUX_RGBA); //初始化显示模式
auxInitPosition(0,0,400,400);
int pixelFormat=ChoosePixelFormat(dc.m_hDC,&pfd);//选择像素格式
BOOL success=SetPixelFormat(dc.m_hDC,pixelFormat,&pfd);// 设 置 像 素
格式
//创建绘图上下文 RC
m_hRC=wglCreateContext(dc.m_hDC);
wglMakeCurrent(NULL,NULL); wglDeleteContext(m_hRC);//删除渲染上下文 m_hRC ⑥改造 OnDraw:根据当前的视点、视距、观看方向等参数,设置合适的 OpenGL 视景体属性,使用户能够看到预期的场景外观。添加的代码如下:
wglMakeCurrent(pDC->m_hDC,m_hRC);
并且图形缓存为单缓存(SINGLE BUFFER)。
◇auxInitPosition () 定义窗口的初始位置, 前两个参数(0, 0) 为窗口的左上
角点的屏幕坐标, 后两个参数(500, 500) 为窗口的宽度和高度。
◇auxInitWindow ()窗口初始化,字符参数是窗口名称。
◇ auxReshapeFunc() 窗 口 大 小 改 变 时 重 新 定 义 场 景 形 状 尺 寸 。 参 数
0,0,0,0, //accum bits ignored
32, //32 位 z 缓冲
0, //不使用模板缓存
0, //no auxiliary buffer
PFD_MAIN_PLANE,
//选择主层面
0, //保留
0,0,0 //layer masks ignored
};
CClientDC dc(this);//创建设备环境类对象 dc
③改造 OnSize 函数:当视图尺寸变化是,应及时将新的客户区尺寸通知 OpenGL, 方能够正确在窗口客户区域显示二维场景,通过命令 glViewPort 完成这项工作。 ④改造 OnEraseBkgnd 函数:重载视图类的 OnEraseBkgnd 成员,使之返回 TRUE 值可以阻止 Windows 重画窗口背景,因为 OpenGL 自己会设置窗口背景,这样 可以防止窗口频繁刷新(如移动窗口)时产生的闪烁现象。 ⑤改造 OnDestroy 函数:在 OnDestroy 成员中需要释放 OnCreate 成员中 RC 所 占用的资源,命令 wglDeleteContext 可以完成这个工作,但在释放 RC 之前,还 需要使用命令 wglMakeCurrent()断开 RC 与设备描述表 DC 的连接。具体代码如 下:
cs.style=WS_CLIPCHILDREN|WS_CLIPSIBLINGS; ②改造 OnCreate 函数:定义像素存储格式,并创建一个 OpenGL 操作所必须的 绘图上下文 RC(Rendering Context)。使用一个 PIXELFORMATDESCRIPTOR 结 构来指定像素格式,使用 wglCreateContext()函数创建绘图上下文 RC。
将头文件<gl.h >、< glu. h>、< glut. h>和< glaux. h>拷贝到 VC 的 include 子目录下。
1. 3 OpenGL 简单例程举例 创建一个基于控制台的应用程序 首先运用 OpenGL 辅助库的窗口管理功能来讲解一个简单的 OpenGL 图
形应用实例, 这个例程创建一个基于控制台的应用程序,在窗口绘制一个线框球。 // Console.cpp : Defines the entry point for the console application. #include "stdafx.h" #pragma warning(disable : 4305) #include <windows.h> //添加 OpenGL 头文件 #include <GL/gl.h> #include <GL/glu.h> #include <GL/glaux.h> //定义用户函数及回调函数 void myInit(void); void CALLBACK myReshape(GLsizei w,GLsizei h); void CALLBACK myDisplay(void);
DrawScene(); //用户自定义函数,用来编写 OpenGL 绘制语句的 wglMakeCurrent(pDC->m_hDC,NULL);// 使 m_hRC 为非现行的绘图上下文 在 DrawScene( )函数中编写具体的绘图程序。首先需要设置视点、视距和观看方 向等场景参数,然后绘制图元。
//窗口显示位置
auxInitWindow("My First Console OpenGL Application"); //窗口标题
myInit();
auxReshapeFunc(myReshape);
auxMainLoop(myDisplay);
return 0;
}
◇auxInitDisplayMode( ) 设置窗口显示模式为 RGBA 方式, 即彩色方式,
void myInit(void) {
glClearColor(0.0,0.0,0.0,0.0); //背景清除颜色 glShadeModel(GL_FLAT); //图形绘制模式 }
void CALLBACK myDisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT);
在 VC 下添加 OpenGL 静态链接库: opengl32.lib、glu32.lib、 glaux.lib、 glut32.lib。
将动态链接库文件 opengl32.dll、GLUT.dll、GLUT32.dll、GLU.dll 拷贝到 系统的"Windows(或 WinNT)\system32\"目录下。
MFC 类库使 penGL 与 Windows 接口的基本方法和步骤, 并举出一个完整的例 子。
2. 1Windows 下的 OpenGL 函数 W indows 下的 OpenGL 包含 200 多个库函数, 这些函数都按一定的格式来 命名, 即每个函数都以 gl 开头。Windows 下的 OpenGL 除了具有基本的 OpenGL 函数外, 还支持其他两类函数: (1) W indows 专用库函数(WGL ) : 6 个函数, 每个函数以 wgl 开头; (2) W in32 AP I 函数: 5 个函数, 函数前面没有专用前缀; 6 个 WGL 函数用于连接 OpenGL 和 W indows。这些函数用于 Windows 环境下的 OpenGL 窗口能够进行渲染着色, 在窗口内绘制位图字体以及把文本 放在窗口的某一位置等。这些函数把 W indows 和 OpenGL 揉合在一起; 最后的 5 个 Win32 函数用于处理象素存储格式和双缓存, 显然这些函数仅仅能够用于 W in32 系统而不能用于其他 OpenGL 平台。 2. 2 OpenGL for W indows 程序设计基本步骤 下面通过一个例子具体讲述利用 VC 的 MFC 类库编写 OpenGL for W indows 的基本步骤: ①改造 PreCreateWindow 函数:将窗口的客户区设置为 OpenGL 能够支持的风 格。具体添加代码如下:
OpenGL 基础知识
1 OpenGL 函数库及简单例程
1. 1OpenGL 函数库 OpenGL 是一个针对图形硬件的软件接口(Software Interface)。它包括 200
多个图形操作函数, 分属于三个基本图形库, 即基础库、实用库、辅助库。OpenGL 基础库是 OpenGL 最底层的图形函数库, 它提供大量的几何图原和图象单元的 操作, 约含 115 个函数, 函数前缀为 gl, 列于头文件<gl.h > 中; OpenGL 实用库 ( the OpenGL Utility Library, GLU ) 是在基础库上开发的高级实用函数库, 它提 供更方便的纹理映射、坐标变换和复杂三维物体建模的调用, 约含 43 个函数, 前 缀 为 glu, 列 于 头 文 件 < glu. h> 中 ;OpenGL 辅 助 库 ( the OpenGL Auxiliary Library,AUX) 是为 OpenGL 编程初学者提供的一系列窗口管理、输入输出及三 维复杂物体绘制的特殊函数库, 因 OpenGL 本身并不带窗口系统, 也不提供复杂 场景绘制功能, 因此提供辅助库便于快速入门,正式应用时可不用这些函数, 而 直接在所用窗口系统下实现这些功能, 辅助库约含 31 个函数, 前缀为 aux, 列于 头文件< aux. h> 中。 1. 2 基本接口编程
合集下载
第三章OPENGL编程基础
OPENGL编程基础
OPENGL编程简介
OpenGL简介
OpenGL基本函数库用来描述图元、属性、几何变 换等等的操作, OpenGL被设计成与设备无关,因此 输入输出函数等许多操作均不包含在其基本库当中。 但在OpenGL的辅助库中有输入和输出函数以及许多 附加函数。
1、基本的OpenGL语法
OpenGL基本库中的函数均以gl为前缀,且函数名中每一 组成词的第一字母大写。如: glBegiGL编程简介
(4)、设定所创建的窗口的大小 glutInitWindowSize(400,300); 到此窗口的设定完成,下面就是你要在窗口中显示什么内容。
(5)、我们用OpenGL核心库写了一个绘制图形的函数,比如命 名 为 Mydisplay , 然 后 将 其 传 递 给 GLUT 函 数 glutDisplayFunc,调用格式为: glutDisplayFunc(Mydisplay);
3、头文件
与C语言画图一样每一个程序中需要包含一个头文件以引 入OpenGL核心库。我们需要用到GLU,需要包该含头文件 来引入窗口系统。对 Windows 系统,存取 WGL 的头文件是 windows.h 。该头文件要在 OpenGL 和 GLU 头文件之前。因 此程序开头几行应为:
# include “windows.h”
11.03.2019
glEnd
glClear
西安工程大学
glPolygonmode
OPENGL编程简介
有些函数要求一个或多个变量用符号常量,所以这些常 量均以大写字母GL开头,常量名中各组成词均采用大写。单 词间用下划线( _ )分隔。例如:
GL_2D GL_RGB GL_AMBIENT_AND_DIFFUSE
OPENGL编程简介
OpenGL简介
OpenGL基本函数库用来描述图元、属性、几何变 换等等的操作, OpenGL被设计成与设备无关,因此 输入输出函数等许多操作均不包含在其基本库当中。 但在OpenGL的辅助库中有输入和输出函数以及许多 附加函数。
1、基本的OpenGL语法
OpenGL基本库中的函数均以gl为前缀,且函数名中每一 组成词的第一字母大写。如: glBegiGL编程简介
(4)、设定所创建的窗口的大小 glutInitWindowSize(400,300); 到此窗口的设定完成,下面就是你要在窗口中显示什么内容。
(5)、我们用OpenGL核心库写了一个绘制图形的函数,比如命 名 为 Mydisplay , 然 后 将 其 传 递 给 GLUT 函 数 glutDisplayFunc,调用格式为: glutDisplayFunc(Mydisplay);
3、头文件
与C语言画图一样每一个程序中需要包含一个头文件以引 入OpenGL核心库。我们需要用到GLU,需要包该含头文件 来引入窗口系统。对 Windows 系统,存取 WGL 的头文件是 windows.h 。该头文件要在 OpenGL 和 GLU 头文件之前。因 此程序开头几行应为:
# include “windows.h”
11.03.2019
glEnd
glClear
西安工程大学
glPolygonmode
OPENGL编程简介
有些函数要求一个或多个变量用符号常量,所以这些常 量均以大写字母GL开头,常量名中各组成词均采用大写。单 词间用下划线( _ )分隔。例如:
GL_2D GL_RGB GL_AMBIENT_AND_DIFFUSE
(计算机图形学)4.opengl编程基础培训资料
绘制三角形
三角形是绘制2D和3D图形的基本单元。掌握绘制三角形的方法是学习OpenGL 的重要一步。
glClearColor函数
glClearColor函数用于设置窗口的清除颜色,即每次渲染前将窗口填充为指定的颜色。这是一个常用函数,有助 于改变渲染效果。
图形学基础概念
计算机图形学是研究图像处理与生成的学科。它涉及数学、物理和计算机科 学的交叉应用,可实现3D建模、渲染和动画效果。
硬件与软件要求
1 硬件需求
图形处理器(GPU),内存,显示器等
2 软件需求
操作系统,OpenGL库,开发环境等
OpenGL的历史与版本
OpenGL是一种跨平台的图形程序接口,由Silicon Graphics Inc.(SGI)于1992年 发布。它不断演进,目前最新的版本是OpenGL 4.6。
创建OpenGL环境
通过准备窗口、初始化OpenGL状态等步骤,我们可以创建一个可交互的 OpenGL绘图环境,准备开始图形编程的学习之旅。
O构包括初始化函数、渲染函数和事件监听函数。熟 悉这个结构有助于编写可读性更高的代码。
变换与移动
变换和移动是创建图形动画的关键技术。通过使用矩阵变换和平移操作,我 们可以改变对象的位置、大小和方向。
第三章OpenGL编程基础PPT课件
GLUT的子程序的前缀使用字母“glut”。
二、GLUT函数:P32-37
1ห้องสมุดไป่ตู้初始化和创建窗口函数:
2、处理窗口和输入函数:
3、绘制三维物体:
4、管理后台处理:
5、运行程序:glutMainLoop(void);
2020/10/13
5
3.3 OpenGL初步编程
一个OpenGL程序一般包括以下几个部分:P38 (1)定义绘制对象 (2)初始化 (3)渲染屏幕图像
第三章OpenGL编程基础
OpenGL是目前用于开发可移植、可交互的 2D和3D图形应用程序的首选环境,也是目前最 广泛采用的计算机图形标准。
OpenGL所具有的功能基本上涵盖了计算机图 形学所要包括的各个方面的内容。
2020/10/13
1
主要内容
3.1 OpenGL简介 3.2 OpenGL应用工具包GLUT 3.3 OpenGL初步编程
详见:OpenGL入门学习
2020/10/13
8
谢谢您的指导
THANK YOU FOR YOUR GUIDANCE.
感谢阅读!为了方便学习和使用,本文档的内容可以在下载后随意修改,调整和打印。欢迎下载!
汇报人:XXXX 日期:20XX年XX月XX日
9
2020/10/13
6
3.3 OpenGL初步编程
一、OpenGL函数命名与数据类型:P38-39
二、OpenGL库和头文件:
动态库:opengl32.dll glu32.dll glut32.dll 放入 windows\system32目录下
静态库:opengl32.lib glu32.lib glut32.lib放入VC安装目录 的LIB目录下
(计算机图形学)4.opengl编程基础培训资料
积极的发展者社区
开发者社区作用非常大,持续为OpenGL带来新 的属性和特性。
通用性
OpenGL不只是一个工具,而是一种用于各种应 用领域的编程语言。
易于使用
OpenGL良好的易用性和多种语言的支持使得其 可以被众多开发者使用。
OpenGL中的着色器
着色器语言:GLSL
着色器是以C语言为基础的GLSL (OpenGL Shading Language)程 序。
OpenGL中的矩阵有两个:变换矩阵和投影矩阵。变换矩阵是几何变换所要使用 的矩阵,投影矩阵是把3D空间转化成2D空间的矩阵。
3
模型视图矩阵
模型视图矩阵可用于表示仿射变换的矩阵,如旋转、平移和缩放
OpenGL中的指针及数据类型
数据类型
OpenGL支持大多数基本数据类型,如整 型、浮点型、字符型等。
OpenGL是一种状态机模型, 即它会根据特定的命令和 当前状态的值来改变内部 状态。
在OpenGL绘制中,顶点数 据、纹理坐标、颜色和其 他绘图属性等都存储在缓 冲容器中。
矩阵操作
1
图形学中的矩阵操作
大量的图形组成和坐标处理需要用到矩阵的计算,矩阵的运算是图形学计算的基 础。
2
OpenGL中的矩阵使用
顶点着色器
顶点着色器主要任务是对单个顶 点进行处理,控制顶点的颜色、 位置、折射等。
像素着色器
像素着色器可对每个像素进行处 理、文本化和质量处理,实现材 质的绘制。
OpenGL基本概念
1 绘图原语
2 状态机模型
3 缓冲容器
OpenGL将所有的绘图对象 抽象为一些基本的几何形 状,如线段、多边形、曲 线等。
应用指针
使用适当的指针,内存读取和写入会更加 高效,可避免重复操作。
开发者社区作用非常大,持续为OpenGL带来新 的属性和特性。
通用性
OpenGL不只是一个工具,而是一种用于各种应 用领域的编程语言。
易于使用
OpenGL良好的易用性和多种语言的支持使得其 可以被众多开发者使用。
OpenGL中的着色器
着色器语言:GLSL
着色器是以C语言为基础的GLSL (OpenGL Shading Language)程 序。
OpenGL中的矩阵有两个:变换矩阵和投影矩阵。变换矩阵是几何变换所要使用 的矩阵,投影矩阵是把3D空间转化成2D空间的矩阵。
3
模型视图矩阵
模型视图矩阵可用于表示仿射变换的矩阵,如旋转、平移和缩放
OpenGL中的指针及数据类型
数据类型
OpenGL支持大多数基本数据类型,如整 型、浮点型、字符型等。
OpenGL是一种状态机模型, 即它会根据特定的命令和 当前状态的值来改变内部 状态。
在OpenGL绘制中,顶点数 据、纹理坐标、颜色和其 他绘图属性等都存储在缓 冲容器中。
矩阵操作
1
图形学中的矩阵操作
大量的图形组成和坐标处理需要用到矩阵的计算,矩阵的运算是图形学计算的基 础。
2
OpenGL中的矩阵使用
顶点着色器
顶点着色器主要任务是对单个顶 点进行处理,控制顶点的颜色、 位置、折射等。
像素着色器
像素着色器可对每个像素进行处 理、文本化和质量处理,实现材 质的绘制。
OpenGL基本概念
1 绘图原语
2 状态机模型
3 缓冲容器
OpenGL将所有的绘图对象 抽象为一些基本的几何形 状,如线段、多边形、曲 线等。
应用指针
使用适当的指针,内存读取和写入会更加 高效,可避免重复操作。
OpenGL编程基础(一)
OpenGL编程基础
课外练习——绘制模式应用: 1、观察GL_LINES、GL_LINE_STRIP和 GL_LINE_LOOP三种直线绘制模式的绘制效果。 2、已知三点坐标,观察GL_TRIANGLES;已知5~6个 点坐标时,观察GL_TRIANGLE_STRIP 和GL_TRIANGLE_FAN三角形绘制模式的绘制效果。
OpenGL编程基础
glBegin()函数中参数mode名称及含义表 值 GL_POINTS GL_LINES 单个的点 一对顶点被解释为一条直线 含义
GL_LINE_STRIP
GL_LINE_LOOP GL_TRIANGLES GL_TRIANGLE_STRIP GL_TRIANGLE_FAN GL_QUADS
glClearDepth(1.0); //将深度缓存区的数值全部设为1.0
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
清空颜色缓冲区和深度缓存区,将颜色缓冲区设置为黑色, 将深度缓存区中所有像素设置为1.0 。
OpenGL编程基础
【注】OpenGL深度缓存的工作原理:将观察对象的深度, 即离观察者(通常为远裁剪面)的距离与窗口中的每一个 像素关联起来。通常先将所有像素的数值设为最大(如果 视景体的深度坐标即Z坐标取值为-1.0~1.0,则1.0为最大值。 深度缓存技术通常用在隐藏面消除、三维混合等方面。
OpenGL编程基础
关于几何图元创建函数的说明: glBegin( ); 句法:void glBegin(mode); 描述:标志着一个顶点数据系列的开始,系列顶点描 述了一个几何图元,参数mode指定了图元的类型,可 以取下页表所列的值。 glEnd( ); 句法:void glEnd(); 描述:标志着一个顶点数据系列的结束。
OpenGL图形编程1介绍(陈永强)
18
1.1OpenGL的主要功能
位图和图像处理
OpenGL 还提供了专门对位图和图象进行操作的 函数。
19
1.1OpenGL的主要功能
纹理映射
三维景物因缺少景物的具体细节而显得不够真实,为了更 加逼真地表现三维景物,OpenGL 提供了纹理映射的 功能。OpenGL 提供的一系列纹理映射函数使得开发 者可以十分方便地把真实图象贴到景物的多边形上,
32位整数 32位浮点数 64位浮点数
short
long float double
S
L F D
GLubyte,GLboolean
GLshort GLuint,GLenum,GLbitfield
位图字体以及把文本放在窗口的某一位置等这些函数把
Windows 和 OpenGL 揉合在一起。
34
1.4OpenGL基本语法
组成
Win32 API 函数库
这部分函数没有专用的前缀,主要用于处理像素 存储格式和双帧缓存。
35
1.4OpenGL基本语法
函数命名规则
OpenGL函数都遵循一个命名约定,即采用以下格
从而可以在视窗内绘制逼真的三维景观。
20
1.1OpenGL的主要功能
实时动画
为了获得平滑的动画效果,需要先在内存中生成 下一幅图象,然后把已经生成的图象从内存拷 贝到屏幕上,这就是 OpenGL 的双缓存技术 (double buffer)。OpenGL 提供了双缓存 技术的一系列函数。
21
1.1OpenGL的主要功能
交互技术
目前有许多图形应用需要人机交互,OpenGL 提
供了方便的三维图形人机交互接口,用户可以选
(计算机图形学)4.OpenGL编程基础
绿色成分(G) 0.0 0.0 1.0 1.0 0.0 0.0 1.0 0.25 0.75 0.40
0.625 0.04 0.40 1.0
蓝色成分(B) 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.25 0.75 0.12 0.12 0.70 0.70 1.0
16
OpenGL程序实例——VC窗口绘制
32位浮点数 64位浮点数
定义为C类型 C字面值后缀
signed char
B
short
SLeabharlann longLfloat
F
double
D
8位无符号整数 unsigned char
Ub
16位无符号整数 unsigned short
Us
32位无符号整数 unsigned long
Ui
12
OpenGL程序实例——头文件包含
利用OpenGL实现图形绘制,首先要引入 OpenGL核心库以及其他需要使用的库的头文 件。
GLUT保证了gl.h和glu.h被正确包含。
#include <gl/glut.h> #include <windows.h>
13
OpenGL程序实例——GLUT窗口管理
初始化( glutInit ) 创建窗口( glutCreateWindow) 设定窗口的显示模式( glutInitDisplayMode) 指定窗口的位置和大小(
7
OpenGL的绘制流程——流水线
OpenGL命令将被放在一个命令缓冲区中,这样 命令缓冲区中包含了大量的命令、顶点数据和 纹理数据。当缓冲区被清空时,缓冲区中的命 令和数据都将传递给流水线的下一个阶段。
调用OpenGL API函数
12_2012三维图形学_OpenGL编程(2)
6.让定义在OpenGL中的图形进行几何变换
(1)OpenGL进行几何变换的基本方法。 在OpenGL中,一般使用矩阵左乘的方法描述图形进行 几何变换,矩阵右乘表达式与矩阵左乘表达式如下:
P1点经过矩阵T1、T2变换之后变成了P2点,
用矩阵右乘可以表示为 用矩阵左乘可以表示为
P2=P1T1T2; P2T=T2TT1TP1T ;
即矩阵左乘描述方法与矩阵右乘描述方法可以相互转
换,只需把各矩阵进行转置变换处理即可;
对于矩阵左乘描述方法,OpenGL的函数只需把T2T、T1T、 P1T依次推入OpenGL的矩阵乘法器中进行运算处理,最后 可求出P2T。这样处理,硬件设计简单。
2020/12/12
OpenGL编程2
1
(2)OpenGL提供下述函数供用户定义几何变换功能 函数
函数 void glTranslatef ( GLfloat x , GLfloat y , GLfloat z ); 表示图形分别沿x,y,z方向进行平移变换。
OpenGL还提供了直接定义变换矩阵与其矩阵元素等函 数,略。
2020/12/12
OpenGL编程2
2
(3)OpenGL提供矩阵堆栈功能,供用户使用 OpenGL为了便于用户编程操作矩阵运算,特提供了对 矩阵进行堆栈操作的功能,即 进栈矩阵函数 glPushMatrix() 出栈矩阵函数 glPopMatrix() 利用这两项操作,用户可以随时进栈保存矩阵乘法器当 前的矩阵参数,并在需要时恢复该矩阵的数据。 这样用户就能在OpenGL的编程过程中,对不同的图形 分别做不同的几何变换。 灯光在OpenGL中是一个没有几何形状、但有几何位置、 能发射光线的物体(需要灯光物体几何形状时另建几何模 型模拟),故灯光的几何位置,也能进行几何变换 看sample2.cpp程序清单 该程序在sample1.cpp的基础上扩展而来。
(1)OpenGL进行几何变换的基本方法。 在OpenGL中,一般使用矩阵左乘的方法描述图形进行 几何变换,矩阵右乘表达式与矩阵左乘表达式如下:
P1点经过矩阵T1、T2变换之后变成了P2点,
用矩阵右乘可以表示为 用矩阵左乘可以表示为
P2=P1T1T2; P2T=T2TT1TP1T ;
即矩阵左乘描述方法与矩阵右乘描述方法可以相互转
换,只需把各矩阵进行转置变换处理即可;
对于矩阵左乘描述方法,OpenGL的函数只需把T2T、T1T、 P1T依次推入OpenGL的矩阵乘法器中进行运算处理,最后 可求出P2T。这样处理,硬件设计简单。
2020/12/12
OpenGL编程2
1
(2)OpenGL提供下述函数供用户定义几何变换功能 函数
函数 void glTranslatef ( GLfloat x , GLfloat y , GLfloat z ); 表示图形分别沿x,y,z方向进行平移变换。
OpenGL还提供了直接定义变换矩阵与其矩阵元素等函 数,略。
2020/12/12
OpenGL编程2
2
(3)OpenGL提供矩阵堆栈功能,供用户使用 OpenGL为了便于用户编程操作矩阵运算,特提供了对 矩阵进行堆栈操作的功能,即 进栈矩阵函数 glPushMatrix() 出栈矩阵函数 glPopMatrix() 利用这两项操作,用户可以随时进栈保存矩阵乘法器当 前的矩阵参数,并在需要时恢复该矩阵的数据。 这样用户就能在OpenGL的编程过程中,对不同的图形 分别做不同的几何变换。 灯光在OpenGL中是一个没有几何形状、但有几何位置、 能发射光线的物体(需要灯光物体几何形状时另建几何模 型模拟),故灯光的几何位置,也能进行几何变换 看sample2.cpp程序清单 该程序在sample1.cpp的基础上扩展而来。
第2讲 OpenGL编程基础
电子与信息工程学院 计算机科学与技术系
Open GL 概述
Open GL图形操作步骤
1 根据基本图形单元建立景物模型,并且对所 建立的模型进行数学描述 2 把景物模型放在三维空间中的合适的位置, 并且设置视点以观察所感兴趣的景观 3 计算模型中所有物体的色彩,其中的色彩根 据应用要求来确定,同时确定光照条件、纹理粘贴 方式等 4 把景物模型的数学描述及其色彩信息转换至 计算机屏幕上的象素
电子与信息工程学院 计算机科学与技术系
Open GL 概述
位图和图象处理
OpenGL还提供了专门对位图和图象进 行操作的函数。
电子与信息工程学院 计算机科学与技术系
Open GL 概述
纹理映射 三维景物因缺少景物的具体细节而显 得不够真实,为了更加逼真地表现三维景 物,OpenGL提供了纹理映射的功能。 OpenGL提供的一系列纹理映射函数使 得开发者可以十分方便地把真实图象贴到 景物的多边形上,从而可以在视窗内绘制 逼真的三维景观。
电子与信息工程学院 计算机科学与技术系
Open GL 建模
点属性 void glPointSize(Glfloat size); 以象素为单位设置点绘制的宽度 size 点的宽度,必须大于0。缺省值为1.0。 注意,这里的点宽度可以不是整数。
电子与信息工程学院 计算机科学与技术系
Open GL 建模
Open GL 建模
在glBegin()和glEnd()之间可调用的函数
电子与信息工程学院 计算机科学与技术系
Open GL 建模
glBegin(GL_POINTS); glColor3f(1.0,0.0,0.0); /* red color */ glVertex(...); glColor3f(0.0,1.0,0.0); /* green color */ glColor3f(0.0,0.0,1.0); /* blue color */ glVertex(...); glVertex(...); glEnd();
OpenGL编程入门.ppt
GLfloat,
GLclampf
d 64-bit floating-point double
GLdouble,
GLclampd
ub 8-bit unsigned integer unsigned char GLubyte,
GLboolean
us 16-bit unsigned integer unsigned
• OpenGL由独立组织ARB(OpenGL Architecture Review Board)管理。成 立于1992年。主要成员有IBM,SGI, Intel, Microsoft,Compaq等。
• 另一独立组织OPC(OpenGL Performance Characterization Committee)负责管 理和发布OpenGL的性能测试基准 (benchmark)。
OpenGL与Windows平台
• Microsoft和SGI共同开发了OpenGL的WIN32版 本,称为WGL。最先OpenGL集成在Windows NT 中,后来集成到了Windows95(OSR2)中。 Windows98已将OpenGL作为标准组成部分。
• 运行OpenGL程序,需要在windows\system目 录下有动态连接库opengl32.dll, glu32.dll, 使用GLUT的用戶需要有glut32.dll。编译 OpenGL程序需要有头文件gl.h和glu.h,库 opengl32.lib,glu32.lib。使用GLUT还需 要头文件glut.h和库glut32.lib。
信息、石油勘探、气候模拟以及娱乐动画上的广泛应用,OpenGL已经成为高性 能图形和交互式视景处理的工业标准。
作为工业标准的OpenGL是以函数库的形式提供给程序员的,安装在不同的操作 系统中,遵从统一的标准,因此使用OpenGL开发的用户程序可在多种系统平台上 移植。
