利用键盘实现橡皮筋技术

键盘输入注册函数: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;
}

时间: 2024-11-09 01:47:59

利用键盘实现橡皮筋技术的相关文章

opengl中橡皮筋技术的实现

修改添加项: C/C++ 中的 __WINDOWS linker 中的 opengl32.lib glu32.lib glaux.lib 实验注意点: 橡皮筋技术的关键在于控制图形随着用户的操作(鼠标移动)而不断发生着变化,此时需要擦除原有的图形同时生成新的图形.橡皮筋技术有两种实现方法: 一种是利用颜色的异或操作,对原有图形并不是擦除,而是在绘制一条同样的直线段并与原图形进行异或操作,此时原图形会从屏幕上消失:另一种是利用双缓存 技术,绘制图形是分别绘制到两个缓存,交替显示.这里我们利用双缓存

C# GDI+ 实现橡皮筋技术

原文 C# GDI+ 实现橡皮筋技术 应该有很多人都在寻找这方面的资料,看看下面我做的,或许对你会有所帮助,但愿如此. 为了实现橡皮筋技术,我用了两种方法: 第一种是利用ControlPaint.DrawReversibleLine(Point start,Point end, Color BackColor)方法,原理:在屏幕上指定的起始点和结束点内绘制具有指定背景色的可逆线,再次绘制同一条线会逆转该方法的结果.使用该方法绘制线类似于反转屏幕的一个区域,不过它提供了更好的性能适用于更广泛的颜色

利用CSS切割图片技术来动态显示图片

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Typ

大数据分析,利用向外扩展技术深入挖掘商业价值

导语:大数据分析技术的价值在企业领域已经非常明确.充分利用良好信息的能力一直是摆在IT部门面前的重要难题与挑战.现在我们已经拥有了足以解决这一难题的工具,接下来要做的就是想办法使其为自己服务了. 方方面面的发展改进已经让从半结构化数据中获取有价值信息成为可能.以Hadoop为代表的新型解决方案在构建层面就充分考虑到了要如何适应跨商用服务器集群的分布式运行环境. 大数据:以需求为导向的审视角度 新型分析工具与极大丰富的处理能力为我们敞开了一道大门,如今企业已经能够借此对庞大的业务及外部数据加以审视

灵活利用已经实现的技术

这几天在webservice开发,传输的数据最理想的是自定义类的数组. 之前测试的时候,用字符串"hello,webservice"做测试,很成功的一个例子 后来复杂数据类型数组的时候,我的搭档一直接受不到数据. 就这样一直持续了大概一个月,是在没办法,导师出马了. 建议我们把这些数据用xml文件封装起来,在客户端进行解析. 就这样,成功了,我把"hello,webservice"改成了"<News><content>this is

利用键盘左右键使图像左右移动,上下键使图像的两个纹理可见度比例上下调整

利用键盘左右键使图像左右移动, glm::mat4 trans; trans = glm::translate(trans, glm::vec3(translation, 0.0f, 0.0f)); glUniformMatrix4fv(glGetUniformLocation(ourShader.ID, "transform"), 1, GL_FALSE, glm::value_ptr(trans)); 1 void processInput(GLFWwindow* window)

实战利用LVM卷镜像技术实现不停业务的数据在线迁移,核心存储升级混闪V7000F 转

实战利用LVM卷镜像技术实现不停业务的数据在线迁移,核心存储升级混闪V7000F 一.介绍 所有数据从旧设备到新设备实现了高速在线迁移,业务系统进行了无缝衔接.整个迁移.切换过程关键设备零重启,对用户正常操作ERP画面未造成任何影响. 二.目的和意义 存储设备运行更加稳定 新的IBM V7000存储(2076-624)属于V7000系列的第三代产品,2016年9月投入市场.存储系统的设计从控制器.数据通道.I/O接口,到磁盘环路都是采用冗余结构,理论上不存在系统本身的单点故障问题.该产品依靠其卓

科普 | 你必须了解的漏洞利用缓解及对抗技术

随着软件系统越来越复杂,软件漏洞变得无法避免.业界逐渐推出了让漏洞无法利用或利用难度提高的方法,简称漏洞缓解技术.我们简单介绍下Android和iOS中广泛使用的一些漏洞缓解及可能的绕过技术.当然这里也包含一些相关联的安全限制,而非真正意义的缓解技术. 缓解及绕过技术点 User Permission 每个app有自己uid,selinux_context,只有申请并且用户允许才有权限做它想做的事.要突破这些限制,可以考虑通过每个app合理的权限相互结合后产生的不合理性来入手.或者App之间交互

如何利用百度霸屏技术打造个人品牌

首先来问下各位朋友?什么是霸屏技术?打个比方就是:搜索某个关键词的时候,搜索引擎出来全部都是你的信息,这就是霸屏SEO技术,霸屏技术就像软文一样,能长时间保留在在互联网上,从而达到长期的推广效果. 一,什么关键词适合做霸屏? 答:冷门关键词 所谓冷门意思就是不常用,冷门词即比较少几率在搜索引擎搜索的关键词,流量时有时无的关键词.在现阶段,中国好声音.nba.北京青年等都是热门关键词.举个例子吧:在今年奥运会傅园慧说出来的"洪荒之力"这个词语,在几年前来说,这是一个冷门词,正是因为对冷门