实例介绍
一、实验目的:
掌握利用OpenGL函数进行鼠标、键盘操作,创建菜单等
二、实验内容:
1、用鼠标拖动画直线,线段终点始终跟随鼠标移动;画线可以利用实验1或实验2中已经实现的画线功能;
2、使用菜单界面修改直线的颜色;
3、利用键盘控制直线在屏幕上移动;
三、实现效果及步骤(或流程)
1. 主要是依靠函数glutMouseFunc(mouseclick);返回鼠标光标在窗口的位置坐标,以及glutMotionFunc(screenmotion);处理当鼠标键摁下时,鼠标拖动的事件。
主要方法代码如下:
void mouseclick(int button, int state, int x, int y) {
switch (button) {
case GLUT_LEFT_BUTTON:
if (state == GLUT_DOWN) {
old_x = x;
old_y = 500 - y;
mouse_type = 1;
}
else if (state == GLUT_UP) { //左键被松开
mouse_type = 0;
glutPostRedisplay(); //标记当前窗口需要重新绘制
}
break;
case GLUT_MIDDLE_BUTTON:
break;
}
}
void screenmotion(int x, int y) {
if (mouse_type == 1) {
new_x = x;
new_y = 500 - y;
glutPostRedisplay(); //标记当前窗口需要重新绘制
}
2.在main方法中创建菜单
glutCreateMenu(colorMenu);
glutAddMenuEntry("red", 1);
glutAddMenuEntry("green", 2);
glutAddMenuEntry("blue", 3);
glutAddMenuEntry("black", 4);
glutAttachMenu(GLUT_RIGHT_BUTTON);
并把指定鼠标右键来选择菜单
菜单被选中时调用的修改直线颜色代码如下:
void colorMenu(GLint colorOption) {
switch (colorOption)
{
case 1:
red = 1; green = 0; blue = 0;
break;
case 2:
red = 0; green = 1; blue = 0;
break;
case 3:
red = 0; green = 0; blue = 1;
break;
case 4:
red = 0; green = 0; blue = 0;
break;
}
glutPostRedisplay();
}
3.在main方法中用函数glutSpecialFunc(keyboard); 指定对于方向键按下时调用的函数keyboard,该方法具体实现代码如下:
void keyboard(int key, int x, int y) {
switch (key)
{
case GLUT_KEY_DOWN:
old_y = old_y - 10;
new_y = new_y - 10;
glutPostRedisplay();
break;
case GLUT_KEY_LEFT:
old_x = old_x - 10;
new_x = new_x - 10;
glutPostRedisplay();
break;
case GLUT_KEY_RIGHT:
old_x = old_x 10;
new_x = new_x 10;
glutPostRedisplay();
break;
case GLUT_KEY_UP:
old_y = old_y 10;
new_y = new_y 10;
glutPostRedisplay();
break;
}
}
相关软件
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论