【VIP专享】OPENGL-第6章交互处理

合集下载

实验四 OpenGL的简单动画与交互

实验四 OpenGL的简单动画与交互

实验四 OpenGL的简单动画与交互一、实验目的1、学会OpenGL的简单键盘交互操作。

2、掌握OpenGL鼠标交互功能及其简单应用。

3、掌握OpenGL的闲置函数与简单动画。

4、掌握反走样思想和算法。

二、实验内容与要求1、在实验一(画矩形)的基础上添加键盘交互,按W键绘制的矩形上移,按S键矩形下移,按A键矩形左移,按D键矩形右移,如图3-1。

参考步骤如下:(1)在主函数里添加键盘注册回调函数glutKeyboardFunc(mykeyboard);此函数可放在 glutDisplayFunc(display);后面。

(2)在display()绘制函数中修改绘制矩形代码,用变量代替数值参数。

例如: glRectf(-0.5,-0.5,0.5,0.5)改为glRectf(x1,y1,x2,y2);(3)在程序中增加mykeyboard键盘子函数,并在如下代码中进行修改,实现键盘控制矩形移动void mykeyboard(unsigned char key, int x, int y){switch(key){ case 'W':case 'w':// 矩形对角坐标变量修改使得矩形上移 break;case 'S':case 's'://矩形对角坐标变量修改使得矩形下移 break;case 'A':case 'a'://矩形对角坐标变量修改使得矩形左移 break;case 'D':case 'd'://矩形对角坐标变量修改使得矩形右移 break;}//参数修改后调用重画函数,屏幕图形将发生改变glutPostRedisplay();}2、闲置函数的使用与简单动画。

旋转的六边形,如图3-3所示阅读OpenGL旋转的六边形样本框架程序rotate-polygon.cpp,分析程序的实现步骤://样本程序:旋转的六边形#include<glut.h>#include<math.h>#define PI 3.14159 //设置圆周率int n=6, R=10; //多边形变数,外接圆半径float theta=0.0; //旋转初始角度值void Keyboard(unsigned char key, int x, int y);void Display(void);void Reshape(int w, int h);void myidle();void main(int argc, char** argv){ glutInit(&argc, argv); //初始化GLUT库;glutInitWindowSize(700,700); //设置显示窗口大小glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); //设置显示模式;(注意双缓冲)glutCreateWindow("A Rotating Square"); // 创建显示窗口glutDisplayFunc(Display); //注册显示回调函数glutReshapeFunc(Reshape); //注册窗口改变回调函数glutIdleFunc(myidle); //注册闲置回调函数glutMainLoop(); //进入事件处理循环}void Display(void){glClear(GL_COLOR_BUFFER_BIT);glColor3f(1.0,0,0); //设置红色绘图颜色glBegin(GL_POLYGON); //开始绘制六边形for (int i=0;i<n;i++)glVertex2f( R*cos(theta+i*2*PI/n), R*sin(theta+i*2*PI/n));glEnd();glutSwapBuffers(); //双缓冲的刷新模式;}void myidle(){theta+=1.0;if (theta>=2*PI) theta-=2*PI;glutPostRedisplay(); //重画,相当于重新调用Display(),改编后的变量得以传给绘制函数}void Reshape(GLsizei w,GLsizei h){glMatrixMode(GL_PROJECTION); //投影矩阵模式glLoadIdentity(); //矩阵堆栈清空gluOrtho2D(-1.5*R*w/h,1.5*R*w/h,-1.5*R,1.5*R); //设置裁剪窗口大小glViewport(0,0,w,h); //设置视区大小glMatrixMode(GL_MODELVIEW); //模型矩阵模式}运行该程序,观察旋转动画效果。

opengl使用手册 简书

opengl使用手册 简书

OpenGL(Open Graphics Library)是一种用于渲染2D和3D图形的跨平台图形API。

OpenGL提供了一系列的函数,可以用来配置图形环境、绘制几何图形、处理纹理、执行变换等。

以下是一个简要的OpenGL使用手册的概述:1. 初始化OpenGL环境:-创建OpenGL上下文,配置窗口和视口,初始化OpenGL的各种参数。

2. 设置投影和视图矩阵:-使用OpenGL的矩阵操作函数,设置投影矩阵和视图矩阵,定义场景中物体的可见范围和视图。

3. 创建和加载着色器:-编写顶点着色器和片元着色器,将它们编译成着色器程序,并链接到OpenGL上下文。

4. 创建和绑定缓冲区对象:-创建顶点缓冲对象(VBO)和索引缓冲对象(IBO)来存储顶点数据和索引数据。

5. 定义顶点数据和绘制图形:-定义顶点数据,将数据传递到缓冲区对象中,使用OpenGL函数绘制图形。

6. 处理纹理:-加载纹理图像,创建纹理对象,将纹理数据传递到GPU,使用纹理进行图形渲染。

7. 执行变换:-使用OpenGL的矩阵操作函数,对物体进行平移、旋转、缩放等变换。

8. 设置光照和材质:-配置光源和材质属性,实现光照效果。

9. 深度测试和遮挡剔除:-启用深度测试和遮挡剔除,以处理物体的深度关系和遮挡关系。

10. 处理用户输入:-处理用户输入,例如键盘和鼠标事件,以交互式地改变场景。

11. 错误处理:-添加错误检查,确保OpenGL函数的调用没有错误,方便调试。

12. 清理和释放资源:-在程序结束时清理和释放分配的OpenGL资源,防止内存泄漏。

13. OpenGL扩展:-了解和使用OpenGL的扩展,以获取更先进的图形特性。

14. 学习资源:-利用OpenGL的学习资源,包括在线教程、书籍和社区,以深入了解图形编程。

请注意,上述步骤是一个简要的概述。

OpenGL是一个庞大而灵活的库,涵盖了广泛的图形编程概念。

深入学习OpenGL需要时间和实践。

OPENGL-第6章交互处理

OPENGL-第6章交互处理

事件编程
Display Handler Keyboard Handler Mouse Handler
Main Event Loop
键盘事件- ASCII键
事件函数:void glutKeyboardFunc(KeyPressFunc) 注册一个键盘ASCII键事件的回调函数,当有键盘按 下时执行回调函数
鼠标回调函数举例
void glutMouseFunc (mousebutton)
Байду номын сангаас
哪个键? 按下/抬起? 当前坐标?
当鼠标左键被按下时
void mousebutton(int button, int state, int x, int y) { if (button==GLUT_LEFT_BUTTON && state==GLUT_DOWN) { rx = x; ry = winHeight - y; } }
鼠标事件
鼠标的键有按键动作: void glutMouseFunc (func) 注册一个鼠标事件的回调函数 回调函数:func (int button, int state, int x, int y) Button:哪个键?左键还是右键 (GLUT_LEFT_BUTTON)(GLUT_RIGHT_BUTTON) state:按下还是抬起? GLUT_UP or GLUT_DOWN
void glutMotionFunc (motion) 当鼠标按下并移动时
void motion(int x, int y) { rx = x; ry = winHeight - y; } 当前坐标?
各种键盘和鼠标的回调函数总结 glutMouseFunc(mousebutton);鼠标按下 或抬起 glutMotionFunc(motion);鼠标按下并运动 glutKeyboardFunc(keyboard);键盘按下

OpenGL中的交互式绘图技术

OpenGL中的交互式绘图技术
当 OpenGL 处 于 选 择 模 式 时 , 不 以 GL_SELECT 为参数调用glRenderMode(),可以退出选择模式, 这时glRenderMode()返回选中记录的个数,这些 记录存放在glSelectBuffer()提供的数组中。
1.2反馈模式
• 信息反馈为程序设计提供了重要的运行资料。在 反馈模式下,场景渲染的信息存入反馈数组中, 不往屏幕输出。
计算机图形学
计算机图形学
• 粒子系统
OpenGL实例近视点Fra bibliotek远视点
OpenGL不仅可以绘制物体,还可以标记物体,以确定 在指定区域上绘制了哪些物体并返回绘图的信息。 绘制物体是在OpenGL缺省的绘图模式下进行的,而 标记物体和反馈绘图信息则是在选择模式和反馈模 式下完成的。 绘图模式,选择模式和反馈模式构成了OpenGL开发 三维图形应用程序的基础。在绘图模式下,物体的 几何参数,光照与材质参数,纹理参数等构成了交 互程序的绘制基础.选择模式则为用户提供了一种拾 取物体的机制,因而成为交互式程序设计的重要方 法。反馈模式将绘图信息加以组织并返回给应用程 序,成为程序设计的重要资料。
1.1 选择模式
• 在OpenGL中,使用int glRenderMode(GLenum mode)来选 择 不 同 的 模 式 。 其 中 mode 是 一 个 符 号 常 量 , 可 以 是 GL_RENDER,GL_SELECT,GL_FEEDBACK 之 一 , 默 认 的 是 GL_RENDER,也就是绘图模式,GL_SELECT指定选择模式, GL_FEEDBACK指定反馈模式。
选择模式
选择模式用来判断哪些图元将被绘制 在窗口的某个区域内。选择操作通过返回 一个整型名称数组来工作,这个数组存放 了名称堆栈当前的内容,这个数组由函数 glSelectBuffer()来提供。

基于OpenGL的交互技术研究

基于OpenGL的交互技术研究
名称堆栈 然后 , 在发出各景物绘图命令 同时 , 用
() 6 应用双缓存技术实现平滑动画。 () 7 提供实现交互技术 的机制。
1 Op n L简 述 eG
O eG pn L是 由 S 公 司推出的独立 于操作 系 GI 统和硬件环境 的开放式三维 图形库 , 作为一种用于
实时 3 图 形 的 工 业 标 准 AP ( p lai r— D I A pi t n Po c o
() 1 创建三维物体 。 () 2 绘制场景并以合适 的角度观看场景。 ( )实现物体 的光照 , 与光源 、 3 这 被照物体的 材质特性和物体表面每点的法向量有关 , 使绘制图
・4 ・ 6 Fra bibliotek上 海 工 程 技 术 大 学 学 报
第2 0卷
形具有真实感和立体感。 () 4 应用纹理映射技术 , 表示物体表面细节 。 ( ) pn L提供一系列特殊的函数 , 5 O eG 使用融 合技术实现半透明效果 ; 使用雾化技术模拟雾或模 糊场景 ; 使用反走样技术, 可以改善图像质量等 , 从
a d a tmaial n iaeisp it g a e n t esr e n uo t l idc t t ani rai h ce n.Att esmet e h ed a k o ea in c n s n c y n h a i ,t efe b c p rt a e d m o
Opn L的交 互技 术。 eG
关键词 : pn L 交互技术 ; O eG ; 选择 ; 拾取 ; 反馈 中图分 类号 : P3 74 T 1 . 文献标 志 码 :A
R s a c fIt r c ie T c n l g s d o e GL e e r h o n e a t e h o o y Ba e n Op n v

第6章交互式技术与用户接口

第6章交互式技术与用户接口
❖ (6)用户界面的设计:包括窗口设计、菜单设计、对话 框、列表框等交互界面。
用子程序库设计用户接口,使用方便、 便于扩充,便于在用户自己编写的程序代 码中加入子程序库中的函数,可以充分利 用高级程序设计语言本身具有的功能,实 现用户希望产生的图形和交互处理。但是, 这种方式实现用户界面需要不断地编写、 调试和修改源程序,不形象直观。子程序 库函数的调用格式要随所用主语言而定, 对子程序库的使用应遵循相应主语言对子 程序或函数的调用约定。
6.2.2 基本交互任务和交互技术
交互技术是用户用交互设备把信息输入进计算 机的不同方式,而交互任务是用户输入到计算机的 一个单元信息。最基本的交互任务有四种,即:定 位、字串、选择、取数。对于一个给定的交互任务, 可用多种不同的交互技术来实现,如一个选择任务 可通过鼠标在菜单中选一项,也可用键盘输入选择 项的名字,还可以通过按一个功能键实现选择。类 似的情况是一种交互设备可用于不同的交互任务, 如鼠标既可以用于定位,也可以用于选择。因此, 交互任务是图形系统所要完成的目标,而交互技术 则是完成交互任务的手段,并且交互技术的实现在 很大程度上依赖于交互设备及其支撑环境。
{polyline1,polyline2,polygon,cycle}
中,用户希望选择对象polygon。当输入p时,反馈 显示3个元素polyline1,polyline2,polygon。直到键 入polyg后,只显示唯一的元素polygon,这时用户 就无需再继续输入剩下的字符了,确认后就唯一地 选择了polygon对象。
定量输入任务是指在某个最小值和最大值之间 指定一个数值,例如温度、时间、透明度等数值量 的输入。典型的交互式定量技术有:① 键盘输入数 值;② 调节电位器的阻值产生相应的数值;③ 用 上下翻转数字的计数器选择数值;④ 用光标移动屏 幕上的标度盘或刻度尺上的指针来确定数值。图6.2 是三维交互设备现在还不成熟,从原理上 看,不少二维交互设备,如操纵杆在旋转的 同时允许其可以移动,则可以形成三维效果。 但真正实用的三维交互设备目前已有两种, 一是基于三维传感器的三维坐标测量仪,二 是数据手套。用数据手套可以记录手指的位 置和方向以及手指的运动轨迹,这为构造真 正的三维交互式图形系统及虚拟现实环境奠 定了基础。

用OpenGL实现交互式的三维图形显示

用OpenGL实现交互式的三维图形显示

第6卷 第10期 2006年5月167121815(2006)1021428202 科 学 技 术 与 工 程Science Technol ogy and Engineering Vol .6 No .10 M ay 2006Ζ 2006 Sci .Tech .Engng .用OpenG L 实现交互式的三维图形显示龚 安 宫法明(中国石油大学,东营257061)摘要 OpenG L 图形系统是访问图形硬件的一种软件接口,通过OpenG L 可以创建交互式的可编辑三维图形系统,制作高性能三维图形处理软件。

简要介绍了OpenG L 的一些基本概念,在此基础上示例性地说明了如何控制OpenG L 的三维显示以实现与用户的交互。

关键词 OpenG L 三维图形 变换 矩阵中图法分类号 TP31714; 文献标识码 B2006年1月4日收到第一作者简介:龚安(1971—),男,硕士,四川巴中,E 2mail:gongan0328@sina .com 。

1 O penGL 的相机显示模型在现实生活中,用相机拍摄一副照片一般要进行如下几个步骤:(1)进行拍摄的物体移动到合适的地方,以便于拍摄;(2)相机固定在三角架上,并将镜头对准要拍摄的物体;(3)调整相机的镜头(如焦距等),以放大、缩小场景或调节取景范围等;(4)最终生成的照片放在幻灯机上,以投射到屏幕进行观察,此时也可以通过调节幻灯机的参数实现屏幕上照片的缩放和平移。

OpenG L 中,将三维模型显示到计算机屏幕的机制与现实生活中使用相机得到相片的过程类似。

其基本原理是通过几种矩阵变换实现对三维模型显示的基本处理过程,基本的矩阵变换包括模型变换、视图变换、投影变换和视口变换。

2 O penGL 的模型变换模型变换相当于拍摄时搬移或旋转物体,或通过某种方法将物体直接进行放缩。

通过模型变换可以实现对物体进行平移、旋转和放缩等操作。

OpenG L 中,对模型变换矩阵进行操作需要用到如下几个函数:glScalef 可实现物体的缩放,其参数分别用来指定物体在三个坐标轴方向上的缩放比例,当三个方向指定的缩放比例不一致时,还可以实现对物体在某个方向进行拉伸的功能;glTranslatef 实现对物体的平移,其参数分别指定了物体在X 、Y 、Z 三个方向上平移的距离;gl Rotatef 可实现物体的旋转。

基于OpenGL的三维模型呈现与交互式场景设计

基于OpenGL的三维模型呈现与交互式场景设计

基于OpenGL的三维模型呈现与交互式场景设计OpenGL(Open Graphics Library)是一种用于渲染2D、3D矢量图形的跨平台图形库,被广泛应用于计算机图形学、虚拟现实、游戏开发等领域。

在计算机图形学中,三维模型的呈现和交互式场景设计是一个重要的课题,本文将探讨基于OpenGL的三维模型呈现与交互式场景设计的相关内容。

1. OpenGL简介OpenGL是一种开放标准的图形API,由Khronos Group维护和更新。

它提供了一系列的函数,用于处理图形渲染、纹理映射、光照效果等。

通过OpenGL,开发者可以利用GPU的强大计算能力来加速图形渲染过程,实现高性能的图形应用程序。

2. 三维模型呈现在基于OpenGL的三维模型呈现中,首先需要加载模型数据。

模型数据通常包括顶点坐标、法向量、纹理坐标等信息。

开发者可以使用OpenGL提供的函数来加载和处理这些数据,然后将模型渲染到屏幕上。

2.1 模型加载模型加载是三维图形应用程序中的重要环节。

开发者可以使用各种建模工具创建三维模型,并将其导出为常见的文件格式,如OBJ、FBX等。

然后通过解析文件格式,将模型数据加载到内存中,并上传到GPU进行渲染。

2.2 着色器编程在OpenGL中,着色器是用来控制顶点和像素处理过程的程序。

开发者可以编写顶点着色器和片元着色器来实现对三维模型的渲染效果控制。

通过着色器编程,可以实现光照效果、纹理映射、阴影效果等。

2.3 纹理映射纹理映射是一种常用的技术,用来给三维模型赋予更加逼真的外表。

开发者可以将图片作为纹理贴图应用到模型表面上,从而实现木纹、金属质感等效果。

在OpenGL中,通过纹理坐标和纹理采样器,可以实现复杂的纹理映射效果。

3. 交互式场景设计除了呈现静态的三维模型外,交互式场景设计也是计算机图形学中一个重要的方向。

通过交互式设计,用户可以与三维场景进行实时交互,改变视角、操作物体等。

3.1 鼠标和键盘输入在交互式场景设计中,鼠标和键盘输入是最常见的用户交互方式。

OpenGL实现3D模型的交互控制

OpenGL实现3D模型的交互控制

1 3DS文件介绍3DS文件存储了模型的材质信息和几何信息,材质信息主要包括材质的名称,材质的纹理贴图所对应的文件名以及材质的颜色等;几何信息主要包括顶点的数目,每个顶点的坐标,三角面的数目,每个三角面上3个顶点的索引,此三角面是否可见等。

3DS文件由许多块组成,每个块包括信息类别和下一个块的相对位置。

块的信息类别用ID表示,它描述了该块的数据信息。

下一个块的相对位置指出了下一个块相对于该块起始位置的偏移字节数。

在块结构中,始终用前2个字节保存D号,接下来的4个字节保存块的长度,块的实际内容则用(块长度)6个字节保存。

块的内容又可能包含子块。

在OpenGL中读入3DS文件的模型的方法有很多,由于本文的程序是在VC + +环境下开发的,所以采用了编写一个类来加载3DS文件的方法。

这样的类很多书籍和网站都有提供,只需进行简单的修改就可以使用,比如修改模型的位置信息以实现模型的移动,增加模型的旋转经度和纬度信息以实现模型的旋转。

1 OpenGL的交互技术在虚拟装机系统中,要求与场景本身进行更多的交互操作,这种交互除了菜单和对话框实现外,在很多情况下是用鼠标来进行的。

OperGL的一大功能就是提供了实现交互技术的机制。

OperGL的交互技术是通过选择、拾取和反馈操作来实现的。

2 1选择选择允许在窗口内部的某个位置用鼠标进行点击,并确定它所点击的是哪个物体。

选择是OpenGL的一种操作模式,选择模式不会改变帧缓存区的内容,退出选择模式时,OperGL返回与视景体相交的图元列表,它列出了位于视景体内或与视景体相交的图元,每个图元产生一个选择命中的记录,对应名称堆栈中的当前内容。

绘制模式进入选择模式前,调用函数gR endeM ode (),其原型为:gRendeMode(GLmum mode)。

控制应用程序当前所处的模式,即绘图、选择和反馈模式,相应的mode的取值为 GL—RENDER、GL—SELECT或 GL—FEEDBACK。

OpenGL功能简介

OpenGL功能简介

OpenGL基本功能(9/11)
反走样(Antialiasing)
线段在计算机中是通过一系列的像素来近似 逼近的,而这些像素实际上是一个个的小正 方形,因此线段常常呈锯齿状,这被称为走 样(Aliasing) OpenGL通过计算线段对各个像素的不同覆盖 率来实现反走样(Antialiasing)
顶点数据 Vertex data 求值器 Evaluators
对每个顶点的操作以及 图元装配 Per-vertex operations and primitive assembly
OpenGL渲染流水线(14/20)
光栅化(Rasterization)
光栅化负责将几何数据和像素数据转换为片元 (Fragment) 片元和将来要显示的像素一一对应 为每一个片元指定颜色和深度值 雾(Fog)、纹理(Texture)操作
对每个顶点的操作和图元装配顶点数据顶点数据vertexdata求值器求值器evaluators对每个顶点的操作以及图元装配图元装配pervertexoperationsandprimitiveassembly对每个顶点的操作以及顶点顶点vertex模型视图矩阵模型视图矩阵modelviewmatrix投影矩阵投影矩阵projectmatrix透视除法透视除法perspectivedivision视区变换视区变换viewporttransform对象坐标对象坐标object人眼坐标人眼坐标eye裁剪裁剪clip归一化归一化normalize窗口坐标窗口坐标windowopengl渲染流水线1420
OpenGL基本功能(7/11)
光照和材质
在现实生活中,物体因为受光照射和自身对 各种频率光波的吸收与反射能力的不同,而 呈现各自不同的颜色 OpenGL的实现

OpenGL入门学习之一至六(精排版可打印学习)

OpenGL入门学习之一至六(精排版可打印学习)

OpenGL入门学习之一至六OpenGL入门学习(一)OpenGL作为当前主流的图形API之一,它在一些场合具有比DirectX(微软公司对硬件编程的接口)更优越的特性。

1、与C语言紧密结合。

OpenGL命令最初就是用C语言函数来进行描述的,对于学习过C语言的人来讲,OpenGL是容易理解和学习的。

如果你曾经接触过TC的graphics.h,你会发现,使用OpenGL作图甚至比TC更加简单。

2、强大的可移植性。

微软的Direct3D虽然也是十分优秀的图形API,但它只用于Windows系统(现在还要加上一个XBOX游戏机)。

而OpenGL 不仅用于Windows,还可以用于Unix/Linux等其它系统,它甚至在大型计算机、各种专业计算机(如:医疗用显示设备)上都有应用。

并且,OpenGL 的基本命令都做到了硬件无关,甚至是平台无关。

3、高性能的图形渲染。

OpenGL是一个工业标准,它的技术紧跟时代,现今各个显卡厂家无一不对OpenGL提供强力支持,激烈的竞争中使得OpenGL性能一直领先。

总之,OpenGL是一个很NB的图形软件接口。

至于究竟有多NB,去看看DOOM3和QUAKE4等专业游戏就知道了。

下面将对Windows下的OpenGL编程进行简单介绍。

学习OpenGL前的准备工作第一步,选择一个编译环境现在Windows系统的主流编译环境有Visual Studio,Broland C++ Builder,Dev-C++等,它们都是支持OpenGL的。

但这里我们选择Visual Studio 2005作为学习OpenGL的环境。

第二步,安装GLUT工具包GLUT不是OpenGL所必须的,但它会给我们的学习带来一定的方便,推荐安装。

Windows环境下安装GLUT的步骤:1、将下载的压缩包解开,将得到5个文件2、在“我的电脑”中搜索“gl.h”,并找到其所在文件夹(如果是VisualStudio2005,则应该是其安装目录下面的“VC\PlatformSDK\include\gl文件夹”)。

【VIP专享】opengl鼠标交互代码

【VIP专享】opengl鼠标交互代码

3.实验原理: 要想在 OpenGL 中处理鼠标事件非常的方便,GLUT 已经为我们的注册好了函数,只要我们提供一个方法。使用函数 glutMouseFunc,就可以帮我们注册我们的函数,这样当发生鼠标事件时就会自动调用我们的方法。 函数的原型是:
void glutMouseFunc(void(*func)(int button,int state,int x,int y)); 参数:func:处理鼠标 click 事件的函数的函数名。 从上面可以看到,处理鼠标单击事件的函数,一定有 4 个参数。第一个参数表明哪个鼠标键被按下或松开,这个变量 可以是下面的三个值中的一个: GLUT_LEFT_BUTTON GLUT_MIDDLE_BUTTON GLUT_RIGHT_BUTTON 第二个参数表明,函数被调用发生时,鼠标的状态,也就是是被按下,或松开,可能取值如下: GLUT_DOWN GLUT_UP 当函数被调用时,state 的值是 GLUT_DOWN,那么程序可能会假定将会有个 GLUT_UP 事件,甚至鼠标移动到窗口 外面,也如此。然而,如果程序调用 glutMouseFunc 传递 NULL 作为参数,那么 GLUT 将不会改变鼠标的状态。剩 下的两个参数(x,y)提供了鼠标当前的窗口坐标(以左上角为原点)。 键盘相关知识可参考:/xie_zi/article/details/1911891 菜单相关知识可参考:/xie_zi/article/details/1963383 4.示范代码: (1)鼠标控制旋转的正方形 #include <GL/glut.h> #include <math.h>
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,通系电1,力过根保管据护线生高0不产中仅工资2艺料22高试2可中卷以资配解料置决试技吊卷术顶要是层求指配,机置对组不电在规气进范设行高备继中进电资行保料空护试载高卷与中问带资题负料2荷试2,下卷而高总且中体可资配保料置障试时2卷,32调需3各控要类试在管验最路;大习对限题设度到备内位进来。行确在调保管整机路使组敷其高设在中过正资程常料1工试中况卷,下安要与全加过,强度并看工且25作尽52下可22都能护可地1关以缩于正小管常故路工障高作高中;中资对资料于料试继试卷电卷连保破接护坏管进范口行围处整,理核或高对者中定对资值某料,些试审异卷核常弯与高扁校中度对资固图料定纸试盒,卷位编工置写况.复进保杂行护设自层备动防与处腐装理跨置,接高尤地中其线资要弯料避曲试免半卷错径调误标试高方中等案资,,料要编试求5写、卷技重电保术要气护交设设装底备备置。4高调、动管中试电作线资高气,敷料中课并设3试资件且、技卷料中拒管术试试调绝路中验卷试动敷包方技作设含案术,技线以来术槽及避、系免管统不架启必等动要多方高项案中方;资式对料,整试为套卷解启突决动然高过停中程机语中。文高因电中此气资,课料电件试力中卷高管电中壁气资薄设料、备试接进卷口行保不调护严试装等工置问作调题并试,且技合进术理行,利过要用关求管运电线行力敷高保设中护技资装术料置。试做线卷到缆技准敷术确设指灵原导活则。。:对对在于于分调差线试动盒过保处程护,中装当高置不中高同资中电料资压试料回卷试路技卷交术调叉问试时题技,,术应作是采为指用调发金试电属人机隔员一板,变进需压行要器隔在组开事在处前发理掌生;握内同图部一纸故线资障槽料时内、,设需强备要电制进回造行路厂外须家部同出电时具源切高高断中中习资资题料料电试试源卷卷,试切线验除缆报从敷告而设与采完相用毕关高,技中要术资进资料行料试检,卷查并主和且要检了保测解护处现装理场置。设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。

opengl使用手册 简书

opengl使用手册 简书

opengl使用手册简书【实用版】目录一、OpenGL 简介二、OpenGL 函数库1.核心函数库2.矩阵操作、几何变换和投影变换函数3.扩展库 GLEW三、OpenGL 菜单的使用1.交互式输入设备的处理2.glut 命令与鼠标函数四、总结正文一、OpenGL 简介OpenGL(Open Graphics Library)是一个跨平台的图形编程接口,用于渲染 2D 和 3D 图形。

它被广泛应用于游戏开发、计算机辅助设计、虚拟现实等领域。

OpenGL 提供了丰富的函数库,可以实现各种复杂的图形效果。

二、OpenGL 函数库OpenGL 的函数库主要可以分为核心函数库和扩展库。

核心函数库包含了基本的绘图功能,如绘制几何图元、矩阵操作、几何变换和投影变换等。

扩展库 GLEW(GLEW Extension Wrangler Library)则提供了更多的高级功能,如阴影、纹理贴图等。

1.核心函数库核心函数库包含了许多常用的绘图函数,如:- glBegin():开始绘制- glEnd():结束绘制- glVertex():绘制一个顶点- glColor():设置颜色2.矩阵操作、几何变换和投影变换函数OpenGL 提供了丰富的矩阵操作、几何变换和投影变换函数,如:- glPushMatrix():矩阵入栈- glPopMatrix():矩阵出栈- glTranslate():几何变换(平移)- glRotate():几何变换(旋转)- glScale():几何变换(缩放)- gluPerspective():投影变换3.扩展库 GLEWGLEW 是一个方便的扩展库,可以方便地管理 OpenGL 扩展。

它提供了一系列的函数,如:- glewInit():初始化 GLEW- glewGetError():获取 GLEW 错误- glewCreateContext():创建 OpenGL 上下文- glewMakeCurrent():设置当前 OpenGL 上下文三、OpenGL 菜单的使用OpenGL 支持交互式输入设备,如鼠标和键盘。

第六章交互式绘图技术

第六章交互式绘图技术

6.1.5 操作的简单化
用户接口的操作应当是简单化的,这样不仅有利于用户理 解和记忆,而且可以尽量减少用户的操作失误。由此,有 两点需要注意: (1)系统只提供当前有效的菜单命令,引导用户只在有 效的范围内工作。用户不能做超出允许范围的事。系统可 以用灰化字体的方式来表示此种命令不可用或在用户单击 此命令时,计算机发出声音提醒,并且没有动作。 (2)尽量避免副作用,不要产生用户不希望的结果。可 以利用图符和窗口系统来帮助和减少记忆量。不同类的信 息可以分别放置在不同窗口内,并且不同的窗口间可以转 换。最重要的是易于用户识别,而不是用户记忆。
6.4 OpenGL中的交互式绘图技术 中的交互式绘图技术
6.4.1 选择 6.4.2 反馈
6.4.1 选择
在OpenGL中,选择机制的建立通常按照以下几 个步骤进行: (1)定义一个数组用于记录选中的结果。 (2)进入选择模式。 (3)初始化名称堆栈。 (4)定义用于选择的观察体。 (5)进行选择。 (6)退出选择模式,并处理返回的选中记录。
6.4.2 反馈
反馈与选择一样,也是OpenGL中的一种模式, 在该模式下不会在计算机屏幕上产生像素格式的 输出结果,而是把用于绘制的图元信息返回到应 用程序中。 反馈模式与选择模式的区别之处在于返回的信息 不同。 在选择模式下,被选中的图元根据其名称将返回 给一个整型数组。而在反馈模式下,将把息包括窗口坐标中变换的顶点数据、光照计算 的颜色结果以及纹理数据。
6.1.4 同一性原则
保持交互式系统的同一性是指设计系统的各个环 节时,应当遵从统一的、简单的规则。无论从信 息的显示还是命令的输入都不应当出现例外或特 殊的情况。保持系统的同一性有利于用户理解和 提高工作效率。 用户接口输入和输出部分的同一性包括许多方面。 如:在输入方面:信息输入语法保持一致。全程 命令、常用命令和各种键盘上的键代表的功能保 持同一等;在输出方面:使用同一符号、颜色表 示同一类信息,不同的颜色代表不同的信息。各 种菜单以及菜单中的项目总在同一位置等。输出 信息的格式应当前后一致。

OPENGL中文教程 OPENGL-6-框架结构

OPENGL中文教程 OPENGL-6-框架结构

5、创建一个空白的OpenGL程序框架NeHe SDK是把Nehe的教程中所介绍的所有功能,以面向对象的形式,提供给编程人员快速开发的一套编程接口。

在下面的教程中,我将按NeHe SDK源码的功能分类,一步一步把这套api介绍给大家。

如果你觉得有更好的学习方法,或者有其他有益的建议,请联系我。

zhouwei02@,zhouwei506@我在第四课的基础上,把公共的功能提取出来,并删除了特定的绘制函数,就完成了这个空白的程序框架,它可以使用基本的OpenGL绘制命令,并提供视口,文本,纹理类的接口,实用他们可以快速创建你想要的效果。

这个框架分为两个部分,启用main.cpp文件完成创建窗口,提供必需的全局变量和执行程序循环等固定的功能。

在以后的演示程序中一般不在改变。

draw.cpp文件完成具体的绘制操作,它随你的应用而变化。

main.cpp的所有功能在前面的课程中都详细讲解过,这里只是把整个程序结构在说明一下,让你有一个清晰的认识。

下面是它的七大结构1.头文件和全局变量2.Windows主函数3.根据用户设置配置OpenGL的窗口4.创建OpenGL运行的窗口,并返回窗口的句柄5.设置绘制字体的参数6.程序循环7.退出程序我们一一介绍如下:1、头文件和全局变量#include "opengl.h" // 包含创建OpenGL程序的框架类#include "splash.h" // 创建配置对话框#include "view.h"// 包含视口类的声明#include "text.h"// 包含2D文字类的声明#include "texture.h" // 包含纹理类的声明#pragma comment( lib, "NeheSDK.lib" ) // 包含NeheSDK.lib库using namespace NeHe; // 使用NeHe名字空间View view; // 创建视口类Text2D text2D; // 2D文字类Texture tex; // 使用全局变量Texture类的实例int texID; // 使用全局变量texID,保存加载的纹理ID2、Windows主函数int WINAPI WinMain(HINSTANCE hInstance, // 程序实例句柄HINSTANCE hPrevInstance, // 前一个程序实例句柄LPSTR lpCmdLine, // 命令行参数int nCmdShow) // Window 显示状态{OpenGL WinOpenGL; // OpenGL类3、根据用户设置配置OpenGL的窗口/******************************************************根据用户设置配置OpenGL的窗口********************************************************/// 显示配置对话框SplashResolution res; // 记录分辨率SplashDepth depth; // 记录颜色深度bool fs; // 是否全屏if(!DoSplash("setup.cfg",&res,&depth,&fs))return 1;int width,height; // 窗口的大小int bpp; // 颜色位深// 设置分辨率switch(res){case sr640x480: width=640; height=480; break;case sr800x600: width=800; height=600; break;case sr1024x768: width=1024;height=768; break;default:width=800; height=600;};// 设置颜色位深switch(depth){case sd8bit: bpp=8; break;case sd16bit: bpp=16; break;case sd32bit: bpp=32; break;default:bpp=32;};// 设置是否全屏WinOpenGL.SetFullScreen((fs==true) ? true : false);/*****************************************************根据用户设置配置OpenGL的窗口:结束***************************************************/4、创建OpenGL运行的窗口,并返回窗口的句柄/****************************************************创建OpenGL运行的窗口,并返回窗口的句柄************************************************/// 创建我们的OpenGL窗口if (!WinOpenGL.CreateGLWindow("DancingWind's OpenGL Framework", width, height, bpp, WinOpenGL.GetFullScreen())){return 0; // 失败,则退出}// 返回窗口类Window *win=WinOpenGL.GetWindow();/*************************************************创建OpenGL运行的窗口,并返回窗口的句柄:结束*********************************************/5、设置绘制字体的参数/******************************************************设置绘制字体的参数******************************************************************/ TextType ttype; // 设置字体结构="Courier New"; // 字体名称为"Courier New"ttype.size=24; // 字体大小为24ttype.bold=false; // 不使用粗体ttype.italic=false; // 不使用斜体ttype.underline=false; // 不使用下划线text2D.Setup(&WinOpenGL,ttype); // 设置字体/******************************************************设置绘制字体的参数:结束************************************************************/6、程序循环/*************************************************************程序循环********************************************************************* /bool finish=false;// 执行程序循环while(!finish){// 绘制场景finish=!WinOpenGL.DrawGLScene();// 按ESC退出if(!finish)finish=win->GetKey(VK_ESCAPE);}/***********************************************************程序循环:结束*****************************************************************/7、退出程序/*************************************************************退出程序********************************************************************* /// 关闭WinOpenGL.KillGLWindow();return 0; // 退出程序/************************************************************退出程序:结束****************************************************************/}到这里框架结构就完成了,下面我们进入到draw.cpp文件中。

opengl使用方法教程

opengl使用方法教程
使用辅助库glaux的方法。
使用GDI和WGL函数的方法。
使用OpenGL实用函数库glut的方法。
OpenGL 使用介绍第10页
OpenGL编程方法
OpenGL与Windows的绘图方式是不同的,其区别主要
表现在以下三个方面:
Windows用GDI绘图。
OpenGL用图形操作描述表(着色描述表、绘制描
wglDeleteContext(hglrc);
OpenGL编程方法
管理像素格式的函数
函数功能
ChoosePixelFormat() 返回与制定像素格式最相
近的像素格式
DescribePixelFormat() 得到指定制定像素格式的
信息
GetPixelFormat() 得到指定像素格式
它。
OpenGL 使用介绍第11页
OpenGL 使用介绍第12页
OpenGL编程方法
Windows提供了5个函数管理图形操作描述
表。这5个函数都有前缀“wgl”,各函数的功能 本文来GIS公园
如下所示。
wglCreateContext() 建立一个图形操作描述表
wglDeleteContext() 删除一个图形操作描述表
OpenGL 使用介绍第6页
OpenGL命令语法和规范
OpenGL包含了近200个函数,分为5类:
核心函数:115个,以gl开头。
实用函数:43个,以glu开头。
辅助函数:31个,以aux开头。
专用函数:6个,以wgl开头。
Win32API函数:5个,无特定前缀。
hglrc:指定一个图形操作描述表。

计算机图形学课件第六章交互式绘图技术

计算机图形学课件第六章交互式绘图技术

5、菜单方式
6、图标方式 6.5.3 交互式用户接口的实现
6.5.1 界面布置 6.5.2 交互式工作方式 6.5.3 交互式用户接口的实现
1、交互式输出界面设计
(1)设计原则
①要全盘考虑显示信息内容,布局和格式等;
②反馈信息和屏幕输出应面向用户,指导用户,以满足
用户需求为目标;
③反馈信息内容应准确、简洁;
④屏幕显示和布局应美观、清楚、合理;
⑤合理安排信息在屏幕上显示顺序;
⑥显示方式一致性;
⑦合理选择文本方式和图形方式显示;
⑧使用图形、多窗口方式显示。
17
(2)屏幕显示技术
①文本式屏幕显示一般格式
a.标题引。
标题
屏幕号
b.屏幕主体。
屏幕体
c.出错信息区。
错误信息
d.状态和提示行。
状态、提示行
②问答式屏幕设计
4、减少出错的可能性
5、提供改错能力
6、面向多种技术层次
第六章 交互式绘图技术
7、减少记忆量
6.2 交互式绘图系统
6.2.1 交互式绘图系统组成
6.2.2 交互式绘图系统交互任务
6.2.3 交互式绘图系统设计原则
9
6.3 交互式绘图的交互技术
交互式绘图技术是一种处理用户输入图形数据的技术, 可分为三类:
第六章 交互式绘图技术 6.5 交互式绘图系统构造方法 6.5.1 界面布置 6.5.2 交互式工作方式 6.5.3 交互式用户接口的实现
14
6.5.1 界面布置
界面布置包括屏幕划分、显示内容、颜色搭配等
1、屏幕划分:如图
菜单区 图形显示区
提示区
图形 显示区
提示区

OPENGL-第6章交互处理

OPENGL-第6章交互处理

子菜单2 主菜单名
第6章Shapes-menu
菜单处理函数举例
当选菜单时,执行下列回调函数 void ProcessMenu(int value) { switch(value) 菜单ID值 {case 1: glutWireSphere(1.0f, 25, 25); break; case 2: …… } }
第2章lines
键盘事件-非ASCII生成键:
事件函数: glutSpecialFunc(SpecialKeys); 注册一个键盘特殊键事件的回调函数,当有键盘按下 时执行注册函数
回调函数: SpecialKeys (int key, int x, int y) 当某个非ASCII键被敲击时,执行回调函数。例如: 箭头键: 功能键:F1、F2、……F12
鼠标回调函数举例
void glutMouseFunc (mousebutton)
哪个键? 按下/抬起? 当前坐标?
当鼠标左键被按下时
void mousebutton(int button, int state, int x, int y) { if (button==GLUT_LEFT_BUTTON && state==GLUT_DOWN) { rx = x; ry = winHeight - y; } }
鼠标事件
鼠标移动事件: • 当鼠标的某个键被按下同时在窗口内移动。x,y光 标的位置 void glutMotionFunc (void (* func)(int x, int y)) • 当鼠标的键未被按下,在窗口内移动。 void glutPassiveMotionFunc(void (* func)(int x, int y))
子菜单项

OpenGL编程指南

OpenGL编程指南

OpenGL编程指南OPenGL编程指南 OPenGL编程指南<<隐藏窗体顶端窗体底端OpenGL 基础图形编程 - 总目录出处: [ 2001-09-20 ] 作者:中国游戏开发者总目录第一章 OpenGL 与三维图形世界 1.1 OpenGL 使人们进入三维图形世界 1.2 OpenGL 提供直观的三维图形开发环境 1.3 OpenGL 称为目前三维图形开发标准第二章 OpenGL 概念建立 2.1 OpenGL 基本理解 2.2 OpenGL 工作流程 2.3 OpenGL 图形操作步骤第三章 Windows NT 环境下的 OpenGL 3.1 Windows NT 下的 OpenGL 函数 3.2 OpenGL 基本功能 3.3 Windows NT 下 OpenGL 结构基本程序结构第四章 OpenGL 基本程序结构第五章 OpenGL 数据类型和函数名第六章 OpenGL 辅助库的基本使用 6.1 辅助库函数分类 6.2 辅助库应用示例第七章 OpenGL 建模 7.1 描述图元 7.1.1 齐次坐标 7.1.2 点 7.1.3 线 7.1.4 多边形 7.2 绘制图元 7.2.1 定义顶点 7.2.2 构造几何图元第八章 OpenGL 变换 8.1 从三维空间到二维平面 8.1.1 相机模拟 8.1.2 三维图形显示流程 8.1.3 基本变换简单分析 8.2 几何变换8.2.1 两个矩阵函数解释 8.2.2 平移 8.2.3 旋转 8.2.4 缩放和反射 8.2.5 几何变换举例8.3 投影变换 8.3.1 正射投影 8.3.2 透视投影 8.4 裁剪变换 8.5 视口变换 8.6 堆栈操作第九章 OpenGL 颜色 9.1 计算机颜色 9.1.1 颜色生成原理 9.1.2 RGB 色立体 9.2 颜色模式 9.2.1 RGBA 模式 9.2.2 颜色表模式 9.2.3 两种模式应用场合 9.3 颜色应用举例第十章 OpenGL 光照 10.1 真实感图形基本概念 10.2 光照模型 10.2.1 简单光照模型10.2.2 OpenGL 光组成 10.2.3 创建光源 10.2.4 启动光照 10.3 明暗处理 10.4 材质10.4.1 材质颜色 10.4.2 材质定义 10.4.3 材质 RGB 值和光源 RGB 值的关系 10.4.4 材质改变第十一章 OpenGL 位图和图像 11.1 位图 11.1.1 位图和字符 11.1.2 当前光栅位置 11.1.3 位图显示 11.2 图像 11.2.1 象素读写 11.2.2 象素拷贝 11.2.3 图像缩放11.2.4 图像例程第十二章 OpenGL 纹理 12.1 基本步骤 12.2 纹理定义 12.3 纹理控制12.3.1 滤波 12.3.2 重复与约简 12.4 映射方式 12.5 纹理坐标 12.5.1 坐标定义 12.5.2 坐标自动产生第十三章 OpenGL 复杂物体建模 13.1 图元扩展 13.1.1 点和线 13.1.2 多边形 13.2 法向计算 13.2.1 法向基本计算方法 13.2.2 法向定义 13.3 曲线生成 13.3.1 曲线绘制举例 13.3.2 曲线定义和启动 13.3.3 曲线坐标计算 13.3.4 定义均匀间隔曲线坐标值 13.4 曲面构造 13.4.1 曲面定义和坐标计算 13.4.2 定义均匀间隔的曲面坐标值13.4.3 纹理曲面 13.4.4 NURBS 曲面第十四章 OpenGL 特殊光处理 14.1 光照模型14.1.1 全局环境光 14.1.2 近视点与无穷远视点 14.1.3 双面光照 14.2 光源位置与衰减14.3 聚光与多光源 14.3.1 聚光 14.3.2 多光源与例程 14.4 光源位置与方向的控制 14.5 辐射光第十五章 OpenGL 效果处理 15.1 融合 15.1.1 Alpha 值与融合 15.1.2 融合因子15.1.3 融合实例 15.2 反走样 15.2.1 行为控制函数 15.2.2 点和线的反走样 15.2.3 多边形的反走样 15.3 雾 15.3.1 雾的概论和例程 15.3.2 雾化步骤第十六章 OpenGL 显示列表 16.1 显示列表概论 16.1.1 显示列表的优势 16.1.2 显示列表的适用场合 16.2 创建和执行显示列表 16.2.1 创建显示列表 16.2.2 执行显示列表 16.3 管理显示列表 16.4 多级显示列表第十七章 OpenGL 帧缓存和动画 17.1 帧缓存 17.1.1 帧缓存组成 17.1.2 缓存清除 17.2 动画【下页】【打印】【关闭】 [ 字号字号:大·中·小 ] OpenGL 基础图形编程 OpenGL 与 3D 图形世界 [ 2001-09-20 ] 作者:出处:中国游戏开发者目录 1.1 OpenGL 使人们进入三维图形世界 1.2 OpenGL 提供直观的三维图形开发环境 1.3 OpenGL 成为目前三维图形开发标准 1.1、 1.1、OpenGL 使人们进入三维图形世界我们生活在一个充满三维物体的三维世界中,为了使计算机能精确地再现这些物体,我们必须能在三维空间描绘这些物体。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

鼠标回调函数举例
void glutMouseFunc (mousebutton)
当鼠标左键被按下时
哪个键? 按下/抬起? 当前坐标?
void mousebutton(int button, int state, int x, int y)
{ if (button==GLUT_LEFT_BUTTON && state==GLUT_DOWN) {
glutKeyboardFunc(keyboard);键盘按下
glutSpecialFunc(special);非ASCII键盘按下
glutIdleFunc(animate);空闲函数
弹出式菜单的制作及过程
•考虑菜单的安排:菜单的级数 •生成各子菜单; •对每个菜单项:
•菜单名:让用户看到的菜单项 •菜单变量:程序用,判别是哪个菜单项,即菜单 的ID •生成主菜单; •建立主菜单和子菜单的关系。 •菜单什么情况弹出?(什么动作?) •回调函数对动作对应的操作处理
回调函数:KeyPressFunc(unsigned char key, int x, int y) 在回调函数中,参数表示了敲击的键和光标位置。 key – 敲击的哪个键; x,y – 光标的位置;
ASCII键动作举例
void KeyPressFunc(unsigned char key, int x, int y) { if(key == 32)//空格键 { nStep++;
xRot-= 5.0f;
F键: GLUT_KEY_F1
if(key == GLUT_KEY_DOWN)
xRot += 5.0f;
if(key == GLUT_KEY_LEFT)
yRot -= 5.0f;
if(key == GLUT_KEY_RIGHT)
yRot += 5.0f;
……
}
第2章lines
第6章 交互处理
基本交互处理 键盘操作 鼠标操作 菜单制作
菜单/对话框
• 交互功能:如何交互? • 使用哪个输入设备?键盘/鼠标/消息 • 动作:敲击键盘,点击鼠标,。。。 • 反馈信息:动作反馈,位置反馈 • 要处理的事情和哪个设备有关系? • 要处理的事情和哪个动作有关系? • 要处理的事情和哪个参数有关系? • 要处理的事情放在哪个函数里? • 要处理多少事情? • 动作事件发生后如何自动处理?
if(nStep > 5) nStep = 0;
} // Refresh the Window glutPostRedisplay(); }
第2章lines
键盘事件-非ASCII生成键:
事件函数: glutSpecialFunc(SpecialKeys); 注册一个键盘特殊键事件的回调函数,当有键盘按下(在当Biblioteka 菜单底部添加新的菜单项,且赋ID号)
菜单项名
ID
11 12
主菜单和子菜单建立关系
void glutAddSubMenu(char *name, int menu) (在主菜单name下添加子菜单名)
例如: nSolidMenu = glutCreateMenu(ProcessMenu); glutAddSubMenu("Solid", nSolidMenu);
鼠标事件
鼠标的键有按键动作: void glutMouseFunc (func) 注册一个鼠标事件的回调函数 回调函数:func (int button, int state,
int x, int y)
Button:哪个键?左键还是右键 (GLUT_LEFT_BUTTON)(GLUT_RIGHT_BUTTON)
事件编程
Display Handler
Keyboard Handler
Mouse Handler
Main Event Loop
键盘事件- ASCII键
事件函数:void glutKeyboardFunc(KeyPressFunc) 注册一个键盘ASCII键事件的回调函数,当有键盘按 下时执行回调函数
时执行注册函数
回调函数: SpecialKeys (int key, int x, int y) 当某个非ASCII键被敲击时,执行回调函数。例如:
箭头键: 功能键:F1、F2、……F12
非ASCII生成键举例
void SpecialKeys(int key, int x, int y)
{ if(key == GLUT_KEY_UP)
rx = x; ry = winHeight - y; } }
void glutMotionFunc (motion)
当鼠标按下并移动时
void motion(int x, int y) { rx = x; ry = winHeight - y; }
当前坐标?
各种键盘和鼠标的回调函数总结 glutMouseFunc(mousebutton);鼠标按下 或抬起 glutMotionFunc(motion);鼠标按下并运动
菜单变量:由创建子菜单时赋值,对
1
应的子菜单变量
2
第6章Shapes-menu
屏幕上弹出菜单的条件
void glutAttachMenu(int button) 鼠标的左键、中键还是右键能弹出菜单? button 可选择 GLUT_LEFT_BUTTON GLUT_MIDDLE_BUTTON GLUT_RIGHT_BUTTON
第6章Shapes-menu
如何生成一个菜单?
值:传递给程序的ID号
生成菜单并赋值给菜单名 int glutCreateMenu(void (*func)(int value)) (创建菜单,注册一个回调函数,带参数)
给菜单中加菜单项: void glutAddMenuEntry(char *name,int value)
state:按下还是抬起? GLUT_UP or GLUT_DOWN
鼠标事件
鼠标移动事件: • 当鼠标的某个键被按下同时在窗口内移动。x,y光
标的位置 void glutMotionFunc (void (* func)(int x, int y))
• 当鼠标的键未被按下,在窗口内移动。 void glutPassiveMotionFunc(void (* func)(int x, int y))
相关文档
最新文档