资源简介

一、实验目的:

掌握利用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\link.command.1.tlog

     文件       3990  2017-04-20 00:25  ex3\ex3\Debug\ex3.tlog\link.read.1.tlog

     文件        444  2017-04-20 00:25  ex3\ex3\Debug\ex3.tlog\link.write.1.tlog

     文件      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个文件信息

评论

共有 条评论