zoukankan      html  css  js  c++  java
  • OpenGL(二十) glutSpecialFunc响应键盘方向控制键


    OpenGL的glut中使用glutMouseFunc函数注册鼠标响应事件,使用glutKeyboardFunc函数注册键盘响应事件,对键盘上特殊的4个方向按键的响应函数是glutSpecialFunc


    方向键响应事件的实现函数的格式是void SpecialKey(GLint key,GLint x,GLint y);


    其中key对应4个方向按键,上下左右按键分别对应于GLUT_KEY_UP、GLUT_KEY_DOWN、GLUT_KEY_LEFT和GLUT_KEY_RIGHT;


    x和y是捕捉的当按键事件发生时显示窗口上鼠标点所处的位置,需要注意的是x和y是以左上角为起点(0,0),右下角为终点(windowWidth,windowHeight)。


    以下程序注册方向按键事件,每次按下方向键,函数的视口函数glViewport的参数发生变化,从而模型投影到屏幕窗口上的位置会发生改变,可以模拟模型在上下左右4个方向上发生移动的情况:


    #include"freeglut.h"
    
    GLfloat xOffset=0.0f,yOffset=0.0f;
    
    void myDisplay()
    {
    	glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);	
    	glColor3f(0,1,0);
    
    	glViewport(xOffset,yOffset,400,400);
    	glRectf(160,160,240,240);
    
    	glutSwapBuffers();
    }
    
    void Init()
    {	
    	glClearColor(1,1,1,1);
    	glMatrixMode(GL_PROJECTION);
    	glLoadIdentity();
    	gluOrtho2D(0,400,0,400);
    }
    
    void SpecialKey(GLint key,GLint x,GLint y)
    {
    	if(key==GLUT_KEY_UP)
    	{
    		yOffset+=10;
    	}	
    	if(key==GLUT_KEY_LEFT)
    	{
    		xOffset-=10;
    	}
    	if(key==GLUT_KEY_DOWN)
    	{
    		yOffset-=10;
    	}
    	if(key==GLUT_KEY_RIGHT)
    	{
    		xOffset+=10;
    	}
    	myDisplay();
    }
    
    int main(int argc, char *argv[])      
    {      
    	glutInit(&argc, argv);   //初始化GLUT  
    	glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);    
    	glutInitWindowPosition(500, 200);      
    	glutInitWindowSize(400, 400);      
    	glutCreateWindow("OpenGL");   
    	Init();   
    	glutDisplayFunc(&myDisplay);   //回调函数   
    	glutSpecialFunc(&SpecialKey);
    	glutMainLoop();         
    }   

    按下上下左右方向键,可以控制显示区域中的绿色方框上下左右移动:



  • 相关阅读:
    Chrome浏览器的使用技巧
    时刻谨记
    ElasticSearch入门
    资源收集记录(技术提高)
    【操作系统之六】Linux常用命令之less
    【操作系统之五】Linux常用命令之grep
    【操作系统之四】Linux常用命令之awk
    【操作系统之三】Linux下进程间通信-IPC(Inter-Process Communication)
    【操作系统之二】死锁
    【操作系统之一】进程、线程、协程
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9411907.html
Copyright © 2011-2022 走看看