一、 实验目的
- 掌握OpenGL的鼠标按钮响应函数。
- 掌握OpenGL的鼠标移动响应函数。
- 进一步巩固OpenGL的基本图元绘制基础。
二、 实验环境
Microsoft Virtual Studio 2017+Win10
三、 实验内容
①鼠标画草图
- 在主程序注册鼠标响应和鼠标移动子函数:
glutMouseFunc(myMouse);
glutMotionFunc(myMotion);
2)在程序头部声明鼠标响应和鼠标移动子函数:
void myMouse(int button, int state, int x, int y);
void myMotion(int x, int y);
3)构建鼠标响应子函数:
//鼠标按钮响应事件
void myMouse(int button, int state, int x, int y)
{
//鼠标左键按下——确定起始点
if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN)
{
line[k][0] = x;
line[k][1] = hh - y;
}
//鼠标左键松开——画最后一个顶点,画线结束
if (button == GLUT_LEFT_BUTTON && state == GLUT_UP) {
line[k][2] = x;
line[k][3] = hh - y;
k++;
glutPostRedisplay();
}
}
4)构建鼠标响应子函数:
void myMotion(int x, int y)
{
//get the lines’ motion point
line[k][2] = x;
line[k][3] = hh - y;
glutPostRedisplay();
}
5)修改显示函数Display(),并添加画线函数drawlines()绘制子程序
void Display(void) {
glClear(GL_COLOR_BUFFER_BIT); //刷新颜色缓冲区
drawlines();
glutSwapBuffers();
}
//画线子程序
void drawlines() {
for (int i = 0; i <= k; i++) {
glBegin(GL_LINES);
glVertex2f(line[i][0], line[i][1]);
glVertex2f(line[i][2], line[i][3]);
glEnd();
}
}
6)添加坐标变量并设置变量初始化,定义Reshape()函数
#define N 1000 //线段最大条数
int line[N][4], k = 0; //线段坐标存储数组, 线段计数