资源简介
一、实验目的:
掌握利用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;
}
}
代码片段和文件信息
// ex3.cpp : Defines the entry point for the console application.
//
#include “stdafx.h“
#include
#include
#include
#include
#include
#include
using namespace std;
typedef vector list;
//vector ls;
int old_x old_y new_x new_y;
int mouse_type;
GLfloat red = 0 green = 0 blue = 0;
/* breseman画线算法 */
void line(int x1 int y1 int x2 int y2) {
glBegin(GL_POINTS);
if (x1 == x2 && y1 == y2) {
glVertex2i(x1 y1);
return;
}
if (x1 > x2) {
swap(x1 x2);
swap(y1 y2);
}
glVertex2d(x1 y1);
int dy = abs(y2 - y1);
int dx = abs(x2 - x1);
if (dx >= dy) {
int incy = (dy != 0 ? dy / (y2 - y1) : 0);
int p = 2 * dy - dx;
int dy2 = 2 * dy;
int dd2 = 2 * (dy - dx);
i
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
..A..H. 33280 2017-05-11 22:16 ex3\.vs\ex3\v14\.suo
文件 77824 2017-04-20 00:25 ex3\Debug\ex3.exe
文件 542016 2017-04-20 00:25 ex3\Debug\ex3.ilk
文件 2256896 2017-04-20 00:25 ex3\Debug\ex3.pdb
文件 218624 2015-10-14 09:58 ex3\Debug\freeglut.dll
文件 337408 2015-10-14 09:58 ex3\Debug\glew32.dll
文件 350720 2015-10-14 09:58 ex3\Debug\glewinfo.exe
文件 43520 2015-10-14 09:58 ex3\Debug\glfw3.dll
文件 222720 2015-10-14 09:58 ex3\Debug\visualinfo.exe
文件 187 2017-04-20 00:25 ex3\ex3\Debug\ex3.log
文件 60199 2017-04-20 00:25 ex3\ex3\Debug\ex3.obj
文件 4128768 2017-04-19 23:30 ex3\ex3\Debug\ex3.pch
文件 3510 2017-04-20 00:25 ex3\ex3\Debug\ex3.tlog\CL.command.1.tlog
文件 27782 2017-04-20 00:25 ex3\ex3\Debug\ex3.tlog\CL.read.1.tlog
文件 838 2017-04-20 00:25 ex3\ex3\Debug\ex3.tlog\CL.write.1.tlog
文件 215 2017-04-20 00:25 ex3\ex3\Debug\ex3.tlog\ex3.lastbuildstate
文件 1852 2017-04-20 00:25 ex3\ex3\Debug\ex3.tlog\li
文件 3990 2017-04-20 00:25 ex3\ex3\Debug\ex3.tlog\li
文件 444 2017-04-20 00:25 ex3\ex3\Debug\ex3.tlog\li
文件 12248 2017-04-19 23:30 ex3\ex3\Debug\stdafx.obj
文件 855040 2017-04-20 00:25 ex3\ex3\Debug\vc140.idb
文件 561152 2017-04-20 00:25 ex3\ex3\Debug\vc140.pdb
文件 3995 2017-04-20 00:25 ex3\ex3\ex3.cpp
文件 219 2017-04-18 20:00 ex3\ex3\ex3.Shared\App.xaml
文件 4238 2017-04-18 20:00 ex3\ex3\ex3.Shared\App.xaml.cpp
文件 813 2017-04-18 20:00 ex3\ex3\ex3.Shared\App.xaml.h
文件 1521 2017-04-18 20:00 ex3\ex3\ex3.Shared\ex3.Shared.vcxitems
文件 545 2017-04-18 20:00 ex3\ex3\ex3.Shared\ex3.Shared.vcxitems.filters
文件 87 2017-04-18 20:00 ex3\ex3\ex3.Shared\pch.cpp
文件 150 2017-04-18 20:00 ex3\ex3\ex3.Shared\pch.h
............此处省略134个文件信息
相关资源
- Duilib新版MenuDemo(仿酷狗菜单展示,仿
- C++ 模拟鼠标单击按钮
- C++ 隐藏“开始”菜单中“设置”里的
- VS2008基于MFC的对话框编程串口上位机
- KinectV2 实现鼠标控制VS2013 C++版
- MFC实现鼠标点击画折线
- MFC鼠标中键拖动、同时滚轮缩放根据
- 五子棋小游戏选择棋盘、棋子;双方
- 简单的鼠标绘图程序C语言
- MFC程序最小化到托盘右键菜单响应操
- 木马程序设计及植入技术
- 多线程的鼠标连点器.cpp
- VC 实现窗口状态栏显示鼠标坐标信息
- 无钩子的键盘记录完美实现(VC++)
- C语言五子棋代码 支持鼠标操作
- C语言 键盘记录
- C++ 控制台 扫雷 鼠标输入
- DOS下鼠标的调用函数C语言
- VC++软键盘源码和QQ软键盘差不多哦
- 用C语言实现图形菜单界面
- c语言图形学鼠标点击画椭圆
- 用c++编写的一个学生信息管理系统,
- 操作系统C语言实现银行家算法,键盘
- 矩阵键盘C语言代码,proteus仿真电路
- 为MFC对话框程序添加菜单和菜单响应
- c++ c 数据结构 课程设计 学生成绩管理
- 从键盘上输入一串字符包括字母、数
- 键盘控制步进电机正反转和调速c语言
- C语言大作业 菜单驱动的学生成绩管理
- MFC程序设计,使用鼠标画图程序,包
评论
共有 条评论