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();         
    }   

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



  • 相关阅读:
    P2176 [USACO14FEB]路障Roadblock
    【最短路】Dijkstra+ 链式前向星+ 堆优化(优先队列)
    图论其一:图的存储
    【计算几何】二维凸包——Graham's Scan法
    P2742 【模板】二维凸包 / [USACO5.1]圈奶牛Fencing the Cows
    P2639 [USACO09OCT]Bessie的体重问题 【背包问题】
    如何评价代码质量的高低
    乔新亮-衡量企业 IT 团队价值的唯一指标是什么
    我总结了平台的5道坎
    hadoop namenode的工作机制
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9411907.html
Copyright © 2011-2022 走看看