OpenGL实现鼠标移动方块
本文实例为大家分享了OpenGL实现鼠标移动方块的具体代码,供大家参考,具体内容如下
思路:用变量设定方块的坐标,然后根据鼠标的位移更改方块的变量坐标。
注意:方块的绘图坐标系和世界坐标系是重合的,鼠标所在的坐标是以窗口的左上角为原点(0,0)的坐标系,窗口的左下角的世界坐标系为gluOrho2D(left,right,bottom,top)中的(left,bottom)。所以鼠标的坐标(xMouse,yMouse)转化为世界坐标(x,y)为:x=xMouse; y=top-yMouse.且鼠标位移的Y增量在世界坐标系中式减量。
#include#include"Graphics.h" intx1=0,y1=0,x2=100,y2=100;//方块的左下角坐标和右上角坐标 intx=0,y=0;//鼠标位置 intdx=0,dy=0;//鼠标位移 intb=0;//判断鼠标是否在方块内 voidinit() { glMatrixMode(GL_PROJECTION); gluOrtho2D(0.0,800.0,0.0,800.0);//窗口左下角的世界坐标系为(0,0) glClearColor(1.0f,1.0f,1.0f,1.0f); } voidtest() { glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0f,0.0f,0.0f); glRecti(x1,y1,x2,y2); glutSwapBuffers(); } intinRect(intxMouse,intyMouse) { yMouse=800-yMouse; if(xMouse x1&&yMouse y1) return1; else return0; } voidmyMouse(intbutton,intstate,intxMouse,intyMouse) { if(button==GLUT_LEFT_BUTTON&&state==GLUT_DOWN){ x=xMouse;//xMouse,yMouse是以窗口的左上角为原点(0,0)的窗口坐标系中的点 y=yMouse; if(inRect(x,y))b=1; } if(button==GLUT_LEFT_BUTTON&&state==GLUT_UP)b=0;//当移动较快时鼠标会在刷新间隔移出方块,所以用DOWN和UP来判断鼠标在方块内 } voidmoveMouse(intxMouse,intyMouse) { if(b){ dx=xMouse-x; dy=yMouse-y; x1=x1+dx; x2=x2+dx; y1=y1-dy;//鼠标的窗口坐标系和世界坐标系的Y轴相反,所以鼠标向Y轴的正方向移动的时候,在世界坐标系是向Y轴的负方向移动 y2=y2-dy; x=xMouse; y=yMouse; } } intmain(intargc,char**argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB); glutInitWindowPosition(0,0); glutInitWindowSize(800,800); glutCreateWindow("MoveSquare"); init(); glutDisplayFunc(test); glutIdleFunc(test);//移动是动画,为了流畅,必须开这个 glutMouseFunc(myMouse); glutMotionFunc(moveMouse); glutMainLoop(); return0; }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。