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

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



  • 相关阅读:
    Lodop客户端本地角色注册号常见误区
    Spring中加载xml配置文件的六种方式
    源程序出现各种奇怪的符号P
    MyEclipse项目中的java文件的图标变成空心的问题
    servlet中的相对路径和绝对路径 及/, ./, ../的区别
    Thread 与 Runnable
    Class.forName()用法详解
    chain.doFilter(request,response)含义
    jsp简单标签开发(一)
    createStatement()的用法
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9411907.html
Copyright © 2011-2022 走看看