您的位置:首页 > 其它

Glut处理鼠标事件和键盘事件

2018-01-28 21:09 330 查看
glut的鼠标回调事件和键盘事件在其他的博客上有很多介绍。

这里做个测试的例子有助理解鼠标事件和键盘事件。

百度云盘:opengl,glut头文件、静态库文件,动态库文件 https://pan.baidu.com/s/1jJsi0Cm 密码imtb

百度云盘:vs2008工程 https://pan.baidu.com/s/1eTFrkOy密码q17h

配置:





运行结果:

(1)按住鼠标左键可以实时显示当前的像面坐标

(2)单击左键图形向上移动

(3)单击右键图形向下移动。



代码:

#include<stdio.h>
#include <stdlib.h>
#include <glut.h>

GLdouble X = 0.0, Y = 0.0;
GLdouble thetaX = 10.0, thetaY = 10.0;

void mouseFunc(int button, int state, int x, int y)
{
if (button== GLUT_LEFT_BUTTON) {
X+=0.2;
Y+=0.2;
printf("Moving up...\n");
}
if (button == GLUT_RIGHT_BUTTON) {
X-=0.2;
Y-=0.2;
printf("Moving Down...\n");
}
glutPostRedisplay();
}
void mouseCoordinate(int x,int y)
{
printf("mouseing ,x:%d,y%d\n",x,y);
}
void normalKeys(unsigned char key, int x, int y)
{
switch (key) {
case 'u':
X+=0.2;
Y+=0.2;
printf("Moving Up...\n");
break;
case 'd':
X-=0.2;
Y-=0.2;
printf("Moving Down...\n");
break;
case 27:
printf("Exiting");
exit(1);
break;
default:
printf("Key pressed does not have a meaning....");
break;

}
glutPostRedisplay();
}

void idle()
{

glutPostRedisplay();
}

void renderScene(void) {
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0f, 0.5f, 0.5f);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(X, Y, 0);
glRotatef(thetaX, 1.0f,  0.0f, 0.0f);
glRotatef(thetaY, 0.0f, 1.0f, 0.0f);
glutSolidSphere(1.0, 20.0, 20.0);
glFlush();
}

int main(int argc, char* argv[]) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA);
glutInitWindowPosition(100,100);
glutInitWindowSize(320,320);
glutCreateWindow(argv[0]);

glutDisplayFunc(renderScene);    //注意这几个函数的前后顺序
glutIdleFunc(idle);
glutMouseFunc(mouseFunc);
glutMotionFunc(mouseCoordinate);  //按住左键显示当前像素坐标。
glutKeyboardFunc(normalKeys);

glutMainLoop();

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: