计算机图形学 实验四 OpenGL的鼠标交互绘制

该博客介绍了如何使用OpenGL通过鼠标交互来实现画线和绘制矩形的功能。首先,通过注册鼠标按钮和移动响应函数,实现鼠标左键按下和释放时确定线段的起点和终点,进而绘制多条直线。然后,通过修改这些函数,当鼠标左键按下和移动时,可以实时绘制矩形,鼠标松开时完成矩形的绘制。整个过程涉及OpenGL的基本图元绘制、鼠标事件处理和窗口调整等核心概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、 实验目的

  1. 掌握OpenGL的鼠标按钮响应函数。
  2. 掌握OpenGL的鼠标移动响应函数。
  3. 进一步巩固OpenGL的基本图元绘制基础。

二、 实验环境
Microsoft Virtual Studio 2017+Win10
三、 实验内容
①鼠标画草图

  1. 在主程序注册鼠标响应和鼠标移动子函数:
		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;		//线段坐标存储数组, 线段计数
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值