嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 3 元微信扫码支付:3 元
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
一、实验目的:
掌握利用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;
}
}