main函数中的第一个Opengl程序-键盘按键处理

1. 代码如下:

#include <gl/glut.h>
#include <gl/gl.h>
#include<stdlib.h>


float angle = 0.0;
float red=1.0, blue=1.0, green=1.0;

void changeSize(int w, int h) 
{

	// Prevent a divide by zero, when window is too short
	// (you cant make a window of zero width).
	if(h == 0)
		h = 1;

	float ratio = 1.0* w / h;

	// Reset the coordinate system before modifying
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();

	// Set the viewport to be the entire window
	glViewport(0, 0, w, h);

	// Set the correct perspective.
	gluPerspective(45,ratio,1,1000);
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
	gluLookAt(0.0,0.0,5.0, 
		0.0,0.0,-1.0,
		0.0f,1.0f,0.0f);


}


void renderScene(void) 
{
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	glPushMatrix();
	glRotatef(angle,0.0,1.0,0.0);

	glColor3f(red,green,blue);

	glBegin(GL_TRIANGLES);
	glVertex3f(-0.5,-0.5,0.0);
	glVertex3f(0.5,0.0,0.0);
	glVertex3f(0.0,0.5,0.0);
	glEnd();
	glPopMatrix();
	angle++;
	glutSwapBuffers();
}

void processNormalKeys(unsigned char key, int x, int y) 
{

	if (key == 27)  //按ESC退出
		exit(0);
}

void processSpecialKeys(int key, int x, int y) 
{

	switch(key) 
	{
	case GLUT_KEY_F1 : red = 1.0; green = 0.0; blue = 0.0; break;
	case GLUT_KEY_F2 : red = 0.0; green = 1.0; blue = 0.0; break;
	case GLUT_KEY_F3 : red = 0.0; green = 0.0; blue = 1.0; break;
	}
}

void main(int argc, char **argv) 
{
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
	glutInitWindowPosition(100,100);
	glutInitWindowSize(320,320);
	glutCreateWindow("Lighthouse 3D - GLUT Tutorial");
	glutDisplayFunc(renderScene);  //
	/*
	glutIdleFunc设置全局的回调函数,当没有窗口事件到达时,GLUT程序功能可以执行后台处理任务或连续动画。
	如果启用,这个idle function会被不断调用,直到有窗口事件发生。
	*/
	glutIdleFunc(renderScene); //空闲时调用的函数,即渲染时调用的函数
	glutReshapeFunc(changeSize);

	//adding here the setting of keyboard processing
	glutKeyboardFunc(processNormalKeys);
	glutSpecialFunc(processSpecialKeys);
	glutMainLoop(); //进入循环,该语句后面的语句不会执行
}


2. 运行效果:会出现一个三角形,并且可以改变窗口大小,按F1,F2,F3键可以改变其颜色,按esc键退出程序;


#include <Windows.h>
#include <gl/gl.h>
#include <gl/glut.h>


void renderScene(void)   
{  
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);  

	glColor3f(0.0,1.0,0.0);  
	glBegin(GL_TRIANGLES);  
	glVertex3f(-0.5,-0.5,0.0);  
	glVertex3f(0.5,-0.5,0.0);  
	glVertex3f(0.0,0.5,0.0);  
	glEnd();  
	glutSwapBuffers();  
	return;
}  

int main( int argc, char *argv[] )
{
	glutInit( &argc, argv );
	glutInitDisplayMode( GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA );
	glutInitWindowPosition(100,100);  
	glutInitWindowSize(320,320);  
	glutCreateWindow("Lighthouse 3D - GLUT Tutorial");  
	glutDisplayFunc(renderScene);  // 
	glutIdleFunc(renderScene);
	glutMainLoop(); //进入循环,该语句后面的语句不会执行 
	return 0;
}


转载来源:http://www.cnblogs.com/jiaohuang/archive/2011/07/25/2116263.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值