OpenGL样板程序,会转动的正方形

本文介绍了一个基本的OpenGL动画程序实现过程,使用VS2010环境。该程序通过旋转矩形来展示动画效果,并实现了鼠标控制动画播放的功能。文章涵盖了OpenGL初始化、绘制、响应鼠标事件等关键环节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个OpenGL样板程序,环境为VS2010


// Test_OpenGL.cpp : 定义控制台应用程序的入口点。
//

/*
 * 1、OpenGL工具函数库(GLU),GLU函数实用glu前缀
 *
 * 2、窗口系统,以支持OpenGL渲染,对于X窗口系统是GLX函数,以glX开头,
 * 对于Windows而言是是WGL函数库,使用wgl前缀
 * 对于Mac OS系统而言AGL(前缀agl)、CGL(前缀cgl)和Cocoa(NSOpenGL类)
 *
 * 3、OpenGL实用工具库(Open Utility Toolkit,GLUT),使用glut前缀
 *
 */

#include "stdafx.h"
#include <Windows.h>
#include <GL/glut.h>

static GLfloat spin = 0.0;
static GLfloat clr_array[]={1.0, 1.23, 0.20};


void init()
{
	glClearColor(0.0, 0.0, 0.0, 0.0);
	glShadeModel(GL_FLAT);
}

void display(void)
{
	glClear(GL_COLOR_BUFFER_BIT);
	glPushMatrix();
	glRotatef(spin,0.0, 0.0, 1.0);

	glColor3fv(clr_array);
	glRectf(-25.0f, -25.0f, 25.0f, 25.0f);  //画矩形
	glPopMatrix();
	glutSwapBuffers();

}

void spinDisplay()
{
	spin += 2.0;
	if(spin > 360.0f){
		spin = spin - 360.0f;
	}
	glutPostRedisplay();

}

void reshape(int w, int h)
{
	glViewport(0, 0, (GLsizei)w, (GLsizei)h);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	glOrtho(-50.0, 50.0, -50.0, 50.0, -1.0, 1.0);
	glMatrixMode(GL_MODELVIEW);
}

void mouse(int button, int state, int x, int y)
{
	switch(button)
	{
	case GLUT_LEFT_BUTTON:
		if (state == GLUT_DOWN)
		{
			glutIdleFunc(spinDisplay);
		}
		break;
	case GLUT_RIGHT_BUTTON:
		if (state == GLUT_DOWN)
		{
			glutIdleFunc(NULL);
		}
		break;
	default:
		break;
	}

}
/***********************************************************************/
/* 第一个OpenGL程序, 动画=重绘+交换                                    */
/***********************************************************************/
int main(int argc, char* argv[])
{
	/*初始化*/
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
	glutInitWindowPosition(100, 100);
	glutInitWindowSize(250, 250);
	glutCreateWindow(argv[0]);

	init();
	/*画图*/
	glutDisplayFunc(display);
	glutReshapeFunc(reshape);
	glutMouseFunc(mouse);

	glutMainLoop();
	return 0;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值