• 利用键盘实现橡皮筋技术


    键盘输入注册函数:glutKeyboardFunc(Key);它指定了程序在运行状态时,按下键盘上的任意一个键都会调用Ker函数:

    void Key(unsigned char key,int x,int ,y);参数key的取值是一个字符值或对应的ASCLL编码,而(x,y)则是按下键盘时窗口中当前屏幕光标相对于

    窗口左上角的位置坐标。

    代码如下:

    #include"gl/glut.h"
    int ipointnum=0;//已确定点的数目
    int x1=0,x2=0,y1=0,y2=0;//确定的点坐标
    int winWidth=400,winHeight=300;//窗口的宽度和高度
    void Initial(void)
    {
        glClearColor(1.0f,1.0f,1.0f,1.0f);//设置窗口的背景颜色
    }
    
    void ChangeSize(int w,int h)
    {
        winWidth=w;winHeight=h;//保存当前窗口的大小
        glViewport(0,0,w,h);//指定窗口显示区域
        glMatrixMode(GL_PROJECTION);//指定设置投影参数
        glLoadIdentity();//调用单位矩阵,去掉以前的投影参数设置
        gluOrtho2D(0.0,winWidth,0.0,winHeight);//设置投影参数
    }
    void Display(void)
    {
        glClear(GL_COLOR_BUFFER_BIT);//用当前背景色填充窗口
        glColor3f(1.0f,0.0f,0.0f);//指定当前的绘图颜色
        if(ipointnum>=1)
        {
            glBegin(GL_LINES);//绘制直线段
            glVertex2i(x1,y1);
            glVertex2i(x2,y2);
            glEnd();
        }
        glutSwapBuffers();//交换缓冲区
    }
    void Key(unsigned char key,int x,int y)
    {
        switch(key)
        {
        case 'p':
            if(ipointnum==0||ipointnum==2)
            {
                ipointnum=1;
                x1=x;y1=winHeight-y;//确定直线段的第一个端点
            }
            else
            {
                ipointnum=2;
                x2=x;y2=winHeight-y;//确定直线段的第二个端点
                glutPostRedisplay();//指定窗口重新绘制
            }
            break;
        default:break;
        }
    }
    void PassiveMouseMove(GLint xMouse,GLint yMouse)
    {
        if(ipointnum==1)
        {
           x2=xMouse;
           y2=winHeight-yMouse;//将当前鼠标位置指定为直线的未固定端点
           glutPostRedisplay();
        }
    }
    int main(int argc,char *argv[])
    {
        glutInit(&argc,argv);
        glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);//使用双缓存及RGB模型
        glutInitWindowSize(400,300);//指定窗口的大小
        glutInitWindowPosition(100,100);//指定窗口在屏幕上的位置
        glutCreateWindow("橡皮筋技术");
        glutDisplayFunc(Display);
        glutReshapeFunc(ChangeSize);//指定窗口再整形回调函数
        glutKeyboardFunc(Key);//指定键盘响应函数
        glutPassiveMotionFunc(PassiveMouseMove);//指定鼠标移动响应函数
        Initial();
        glutMainLoop();//启动主GLUT时间处理循环
        return 0;
    }
    View Code
  • 相关阅读:
    PLSQL设置中文
    新建oracle实例
    eclipse中导入项目后中文成乱码解决办法
    安装oracle
    配置java环境变量
    学习springMVC实例1——配置和跳转到HelloWorld
    突破变态限制快捷方式提权法
    对象的内存布局
    XMl转Map-map调用公共模板
    对象的创建
  • 原文地址:https://www.cnblogs.com/acm-jing/p/4374040.html
Copyright © 2020-2023  润新知