文档章节

opengl学习之四:OpenGL辅组库的基本使用

生命奇迹泉
 生命奇迹泉
发布于 2016/04/20 15:42
字数 1331
阅读 2
收藏 0

OpenGL是一个开放的系统,它是独立于任何窗口系统或操作系统的。尽管它包含了许多图形函数,但它却没有窗口函数,也没有从键盘和鼠标读取事件的函数,所以要初学者写出一个完整的图形程序是相当困难的。另外,OpenGL图形函数中只提供基本的几何原形:点、线、多边形,因此要创建基本的三维几何体如球、锥体等,也很不容易。而OpenGL辅助库就是为解决这些基本问题专门设计的,它提供了一些基本的窗口管理函数和三维图形绘制函数,能帮助初学者尽快进入OpenGL世界,掌握关键的三维图形技术,体会其中奇妙的乐趣。但是,对于复杂的应用,这些函数远远不够,只能作为参考。

4.1、辅助库函数分类
  这一节内容可以作为手册查阅,初学者不必深究。
  辅助库函数大致分为六类:

4.1.1 窗口初始化和退出
  相关函数有三个,它们在第一章已提到,这里将详细介绍:

void auxInitWindow(GLbyte *titleString)

  打开一个由auxInitDisplayMode()和auxInitPosition()指定的窗口。函数参数是窗口标题,窗口背景缺省颜色是RGBA下的黑色或颜色表(color_index)下的0号调色板的颜色。按下Escape键可以完成关掉窗口、结束程序、全部清屏三项功能。

void auxInitDisplayMode(GLbitfield mask)

  设置窗口显示模式。基本模式有RGBA或颜色表、单或双缓存,也可指定其他附加模式:深度、模板或累积缓存(depth,stencil,and/or accumulation buffer)。参数mask是一组位标志的联合(取或),AUX_RGBA或AUX_INDEX、AUX_SINGLE或AUX_DOUBLE,以及其它有效标志AUX_DEPTH、AUX_STENCIL或AUX_ACCUM。

void auxInitPosition(GLint x,GLint y,GLsizei width,GLsizei height)

  设置窗口位置及大小。参数(x, y)为窗口的左上角点的屏幕坐标,参数(width, height)为窗口的宽度和高度,单位为象素,缺省值为(0, 0, 100, 100)。

4.1.2 窗口处理和事件输入
  当窗口创建后,且在进入主函数循环之前,应当登记以下列出的回调函数(callback function):

void auxReshapeFunc(void(*function)(GLsizei,GLsizei))即窗口改变后的新宽度和新高度

  定义窗口改变时形状重定函数。参数function是一个函数指针,这个函数带有两个参数,即窗口改变后的新宽度和新高度。通常,function是glViewport(),显示裁减后的新尺寸,重定义投影矩阵,以便使投影后图像的比例与视点匹配,避免比例失调。若不调用auxReshapeFunc(),缺省重定物体形状的函数功能是调用一个二维的正射投影矩阵。运用辅助库,窗口将在每个事件改变后自动重新绘制。

void auxKeyFunction(GLint key,void(*function)(void))定义键盘响应函数

定义键盘响应函数。参数function就是当按下key键时所调用的函数指针,辅助库为参数key定义了几个常量:AUX_0至AUX_9、AUX_A至AUX_Z、AUX_a至AUX_z、AUX_LEFT、AUX_RIGHT、AUX_UP、AUX_DOWN(方向键)、AUX_ESCAPE、AUX_SPACE或AUX_RETURN。

void auxMouseFunc(GLint button,Glint mode,void(function)(AUX_EVENTREC ))定义鼠标响应函数

  定义鼠标响应函数。参数function就是当鼠标以mode方式作用于button时所调用的函数。参数button有AUX_LEFTBUTTON、AUX_MIDDLEBUTTON或AUX_RIGHTBUTTON(以右手为标准)。参数mode代表鼠标触击状态,击中时为AUX_MOUSEDOWN,释放时为AUX_MOUSEUP。参数function必须带一个参数,它是指向结构AUX_EVENNTREC的指针。当函数auxMouseFunc()被调用时将为这个结构分配相应的内存。通常用法类似如下:

void function(AUX_EVENTREC *event)
  {
    GLint x,y;
    x=event->data[AUX_MOUSEX];
    y=event->data[AUX_MOUSEY];
    …
  }

4.1.3 颜色表装入
  因为OpenGL本身没有窗口系统,所以依赖于窗口系统的颜色映射就没法装入颜色查找表。如果采用颜色表模式,就要用到辅助库提供的用RGB值定义的单个颜色索引函数:

void auxSetOneColor(GLint index,GLfloat red,GLfloat green,GLfloat blue)如果采用颜色表模式,就要用到辅助库提供的用RGB值定义的单个颜色索引函数

  设置自定义颜色的索引。参数index即索引号,参数red、green、blue分别为红、绿、蓝值,范围在(0~1)内。

4.1.4 三维物体绘制
  每组三维物体包括两种形式:网状体(wire)和实心体(solid)。网状体没有平面法向,而实心体有,能进行光影计算,有光照时采用实心体模型。下面这些函数的 参数都是定义物体大小的,可以改变。
  这里写图片描述
4.1.5 背景过程管理

void auxIdleFunc(void *func)

  定义空闲状态执行函数。参数func是一个指针,指向所要执行的函数功能。当它为零时,func执行无效。

4.1.6 程序运行

void auxMainLoop(void(*displayFunc)(void)) 定义场景绘制循环函数

 定义场景绘制循环函数。displayFunc指针指向场景绘制函数。当窗口需要更新或场景发生改变时,程序便调用它所指的函数,重新绘制场景。

本文转载自:http://blog.csdn.net/shengmingqijiquan/article/details/51174201

生命奇迹泉
粉丝 1
博文 42
码字总数 0
作品 0
海淀
程序员
私信 提问
ubuntu12.04下安装opengl

前言 OpenGL 是一套由SGI公司发展出来的绘图函式库,它是一组 C 语言的函式,用于 2D 与 3D 图形应用程式的开发上。 OpenGL 让程式开发人员不需要考虑到各种显示卡底层运作是否相同的问题,硬...

guoliang
2014/02/27
36
0
【转载】OpenGL C#绘图环境配置

OpenGL简介 OpenGL作为一种图形学编程接口已经非常流行, 虽然在大型游戏方面DirectX有一定的市场占有率, 但由于OpenGL的开放性,可移植性等优点,OpenGL已经成了一种图形学方面的标准。 由...

venorie
2013/06/17
714
0
OpenGL基础概念(学习记录)

各平台渲染标准: win32 : OpenGL ,DirectX android: Skia/Canvas (安卓SDK,2d) , OpenGL ES +NDK mac/ios :Quartz2D,OpenGL ES Linux: OpenGL wp7:DirectX win8/wp8 : DirectX 游戏引擎基于......

Frank_何益明
2018/11/26
0
0
图片和图形之用OpenGL ES显示图形(9)

原文 概要 Android框架提供了大量用于创建有吸引力的功能性图形用户界面的标准工具。但是,如果您想要更多地控制应用程序在屏幕上绘制的内容,或者冒险进入三维图形,则需要使用其他工具。A...

lichong951
2018/05/26
0
0
OpenGL ES Programming Guide for iOS 第一章

关于OpenGL ES Open Graphics Library(OpenGL)用于二维及三维数据的可视化。它是一种多用途的开放标准图形库,支持二维和三维数位内容创作,机械和建筑设计,虚拟样,飞行模拟,游戏,以及更...

长平狐
2012/10/08
484
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql-connector-java升级到8.0后保存时间到数据库出现了时差

在一个新项目中用到了新版的mysql jdbc 驱动 <dependency>     <groupId>mysql</groupId>     <artifactId>mysql-connector-java</artifactId>     <version>8.0.18</version> ......

ValSong
54分钟前
5
0
Spring Boot 如何部署到 Linux 中的服务

打包完成后的 Spring Boot 程序如何部署到 Linux 上的服务? 你可以参考官方的有关部署 Spring Boot 为 Linux 服务的文档。 文档链接如下: https://docs.ossez.com/spring-boot-docs/docs/r...

honeymoose
56分钟前
5
0
Spring Boot 2 实战:使用 Spring Boot Admin 监控你的应用

1. 前言 生产上对 Web 应用 的监控是十分必要的。我们可以近乎实时来对应用的健康、性能等其他指标进行监控来及时应对一些突发情况。避免一些故障的发生。对于 Spring Boot 应用来说我们可以...

码农小胖哥
今天
6
0
ZetCode 教程翻译计划正式启动 | ApacheCN

原文:ZetCode 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。 ApacheCN 学习资源 贡献指南 本项目需要校对,欢迎大家提交 Pull Request。 ...

ApacheCN_飞龙
今天
4
0
CSS定位

CSS定位 relative相对定位 absolute绝对定位 fixed和sticky及zIndex relative相对定位 position特性:css position属性用于指定一个元素在文档中的定位方式。top、right、bottom、left属性则...

studywin
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部