OpenGl实验3

#include <gl/glut.h>
static GLsizei iMode = 1; 
static GLfloat sx = 1.0;
static GLfloat sy = 1.0;
static GLfloat tx = 0.0f;
static GLfloat ty = 0.0f;
void Initial(void)
{
		glClearColor(1.0f, 1.0f, 1.0f, 1.0f);      //设置窗口背景颜色为白色
		gluOrtho2D(-30.0,30.0,-20.0,20.0);//居中显示
}
void ChangeSize(int w,int h)
{
	glViewport(0,0,w,h);
	glMatrixMode(GL_PROJECTION);     //设置投影参数
	glLoadIdentity();
	gluOrtho2D(-30.0,30.0,-20.0,20.0);//居中显示
}
void Display(void)
{
		glClear(GL_COLOR_BUFFER_BIT);   //用当前背景色填充窗口
		glMatrixMode(GL_PROJECTION);     //设置投影参数
		glLoadIdentity();

		glTranslatef(tx, 0.0f, 0.0f);     
		glTranslatef(0.0f, ty, 0.0f); 
		glScalef(sx,sy,0.0f);//左键每一次点击扩大0.1
		glColor3f(1.0f, .0f, 0.0f);            //设置当前的绘图颜色为红色
		switch(iMode)
		{
		case 1:
			glColor3f(.0f, 0.0f, 0.0f); //黑
			break;
		case 2:
			glColor3f(1.0f, .0f, .0f); //红
			break;
		case 3:
			glColor3f(0.0f, .0f, 1.0f); //蓝
			break;
		case 4:
			glColor3f(.0f, 1.0f, 0.0f); //绿
			break;
		case 5:
			glColor3f(1.0f, 1.0f, 1.0f); //白
			break;
		case 6:
			glDisable(GL_LINE_STIPPLE);
			break;
		case 7:
			glEnable(GL_LINE_STIPPLE);
			glLineStipple(1,255);
			break;
		default :
			break;
		}


		//多边形的绘制
		glBegin(GL_LINE_LOOP);
			glVertex2f(-10,-10);
			glVertex2f(10,-10);
			glVertex2f(20,0);
			glVertex2f(0,10);
			glVertex2f(-20,0);
		glEnd();
		
		glFlush();                         //处理所有的OpenGL程序
}

void ProcessMenu(int value)
{
	iMode = value;
	glutPostRedisplay();
}
//键盘交互调用函数
void Key(unsigned char key,int x,int y)
{
	switch(key)
	{
	case 'q':
		exit(0);
		break;
	case 'Q':
		exit(0);
		break;
	case 'S':
		sx+=0.1;
		sy+=0.1;
		glutPostRedisplay();
		break;
	case 'D':
		sx-=0.1;
		sy-=0.1;
		glutPostRedisplay();
		break;
	default:
		break;
	}
}
//如果是鼠标键控制旋转,可以参考p93
void SpecialKeys(int key,int x,int y)
{
	if(key == GLUT_KEY_UP)	ty += 0.1f;
	if(key == GLUT_KEY_DOWN) ty -= 0.1f;
	if(key == GLUT_KEY_LEFT) tx -= 0.1f;
	if(key == GLUT_KEY_RIGHT) tx += 0.1f;
	
	glutPostRedisplay();
}
//鼠标交互调用函数,左键缩小,右键扩大
void MousePlot(GLint button,GLint action,GLint xMouse,GLint yMouse)
{
	if(button == GLUT_LEFT_BUTTON && action == GLUT_DOWN)
	{
		sx+=0.1;
		sy+=0.1;
	}
	if(button ==GLUT_RIGHT_BUTTON && action == GLUT_DOWN)
	{
		sx-=0.1;
		sy-=0.1;
	}
	glutPostRedisplay();
}

int main(int argc, char* argv[])
{
		glutInit(&argc, argv);
		glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);  //初始化窗口的显示模式
		glutInitWindowSize(800,800);                  //设置窗口的尺寸
		glutInitWindowPosition(600,120);               //设置窗口的位置
		glutCreateWindow("矩形");                    //创建一个名为矩形的窗口

		
		//创建菜单
		int color= glutCreateMenu(ProcessMenu);
		glutAddMenuEntry("黑色",1);
		glutAddMenuEntry("红色",2);
		glutAddMenuEntry("蓝色",3);
		glutAddMenuEntry("绿色",4);
		glutAddMenuEntry("白色",5);
		int lineStrpple = glutCreateMenu(ProcessMenu);
		glutAddMenuEntry("直线",6);
		glutAddMenuEntry("虚线",7);
		int nMainMenu = glutCreateMenu(ProcessMenu);
		glutAddSubMenu("颜色",color);
		glutAddSubMenu("线型",lineStrpple);
		glutAttachMenu(GLUT_MIDDLE_BUTTON);//与鼠标中键绑定


		glutKeyboardFunc(Key);			//普通键输入注册函数
		glutSpecialFunc(SpecialKeys);
		glutMouseFunc(MousePlot);		//注册鼠标响应函数
		//glutMotionFunc(MouseMove);//鼠标按下并移动时的响应函数
		//glutReshapeFunc(ChangeSize);

		glutDisplayFunc(Display);                     //设置当前窗口的显示回调函数
		Initial();                                    //完成窗口初始化
		glutMainLoop();                             //启动主GLUT事件处理循环
		return 0;
}

计算机图形学实验OPENGL可视化 计算机图形学实验 opengl 三个实验 附有具体代码 跟VC6一样的 一、下载并安装glut库 opengl的glut库 GLUT不是OpenGL所必须的,但它会给我们的学习带来一定的方便,推荐安装。 Windows环境下的GLUT下载地址:(大小约为150k) http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip Windows环境下安装GLUT的步骤: 1、将下载的压缩包解开,将得到5个文件 2、在“我的电脑”中搜索“gl.h”,并找到其所在文件夹(Program Files\Microsoft Visual Studio\VC98\Include\GL文件夹”)。把解压得到的glut.h放到这个文件夹。 3、把解压得到的glut.lib和glut32.lib放到静态函数库所在文件夹(Program Files\Microsoft Visual Studio\VC98\lib”文件夹)。 4、把解压得到的glut.dll和glut32.dll放到操作系统目录下面的system32文件夹内。(典型的位置为:C:\Windows\System32) 二、vc工程配置: 1)创建一个工程。glut 是一个console project ,你创建的时候必须创建console 以对应 . 2)链接OpenGL libraries。在Visual C++中先单击Project,再单击Settings,再找到Link单击, 在“分类”(Category)组合框里选择“输出”(output) ,再在“入口点”(Entry-point symbol)文本框里键入“mainCRTStartup” ,对一个现有的控制台应用程序,有一个简单的办法把它转换成Win32应用程序,这样可以摆脱那个命令行窗口。 3)单击Project Settings中的C/C++标签,将Preprocessor definitions 中的_CONSOLE改为__WINDOWS。最后单击OK。 增加下面的文件到“对象/库模块" (Object/library/modules):OpenGL32.lib glut32.lib glu32.lib (有时候不需要glut32.lib) 4)然后在stdafx.h文件中加入 #include #include #include #include #include 注意:#include 是需要的,不引入的话有时会报错。 完成后,就可以编写你自己的程序了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值