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

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



  • 相关阅读:
    html的转码玉反转码
    获取url据对路径写法
    CSS 外边距合并
    页面禁制选中元素的 背景变蓝的通用写法
    centos7.3上安装oracle11.2.4RAC
    通过ansible检查所有服务器根目录磁盘使用情况
    解决es集群启动完成后报master_not_discovered_exception(hostname有错误)
    tidb4.0执行大型sql报没有tmp目录错处理(ERROR 1105 (HY000): open /tmp/1000_tidb/MC4wLjAuMDo0MDAwLzAuMC4wLjA6MTAwODA)
    aix磁盘创建pv、lv
    aix6.1安装oracle
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9411907.html
Copyright © 2020-2023  润新知