您的位置:首页 > 其它

利用键盘实现橡皮筋技术

2015-03-28 12:29 363 查看
键盘输入注册函数: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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: