计算机图形学——实验五 三维造型

使用键盘和菜单功能绘制不同的几何图形,键盘的上、下、左、右键控制图形旋转,使用菜单选择绘制不同的图形。

#include "stdafx.h"
#include <gl/glut.h>
static GLsizei iMode = 1;
static GLfloat xRot = 0.0f;
static GLfloat yRot = 0.0f;
void Initial(void) {
	glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
	glColor3f(0.0f, 0.0f, 0.0f);
}
void ChangeSize(int w, int h) {
	glViewport(0, 0, w, h);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluOrtho2D (-1.5f, 1.5f, -1.5f, 1.5f);

}
void Display(void) {
	glClear (GL_COLOR_BUFFER_BIT);
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
	glColor3f(1.0f,0.0f,0.0f);
	glRotatef(xRot,1.0f,0.0f,0.0f);
	glRotatef(yRot,0.0f,1.0f,0.0f);
	switch (iMode) {
		case 1:
		//绘制线框正四面体(glutwireTetrahedron())
			glutWireTetrahedron();
			break;
		case 2:
		//绘制实体正四面体(glutSolidTetrahedron())
			glutSolidTetrahedron();
			break;
		case 3:
		//绘制线框正八面体(glutWireoctahedron())
			glutWireOctahedron();
			break;
		case 4:
		//绘制实体正八面体(glutSolidoctahedron())
			glutSolidOctahedron();
			break;
		case 5:
		//绘制线框球面(glutwireSphere())
			glutWireSphere(1.0f,15,15);
			break;
		case 6:
		//绘制实体球面(glutSolidSphere())
			glutSolidSphere(1.0f,15,15);
			break;
		case 7:
		//绘制线框茶壶(glutwireTeapot())
			glutWireTeapot(1.0f);
			break;
		case 8:
		//	绘制实体茶壶(glutSolidTeapot())
			glutSolidTeapot(1.0f);
			break;
		default:
			break;
	}
	glFlush();
}

//菜单函数
void ProcessMenu(int value) {

	//选择绘制模式
	iMode = value;
	glutPostRedisplay();
}
//键盘控制函数
void Specialkeys(int key, int x, int y) {
	//绕x轴旋转的角度变化
	if (key == GLUT_KEY_UP) {xRot-=5.0f;}
	if (key == GLUT_KEY_DOWN) {xRot+=5.0f;}
	//绕轴旋转的角度变化
	if (key == GLUT_KEY_LEFT) {yRot-=5.0f;}
	if (key == GLUT_KEY_RIGHT) {yRot+=5.0f;}
	glutPostRedisplay();
}

int main(int argc, char* argu[]) {
	glutInit(&argc, argu);
	glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
	glutInitWindowSize(400, 400);
	glutInitWindowPosition(100, 100);
	glutCreateWindow("你的名字");
//创建菜单并定义菜单回调函数
//创建GLUT多面体绘制菜单
	int nGlutPolyMenu = glutCreateMenu(ProcessMenu);
	glutAddMenuEntry("绘制线框正四面体", 1);
	glutAddMenuEntry("绘制实体正四面体", 2);
	glutAddMenuEntry("绘制线框正八面体", 3);
	glutAddMenuEntry("绘制实体正八面体", 4);
//创建GLUT曲面绘制菜单
	int nGlutCurveMenu = glutCreateMenu(ProcessMenu);
	glutAddMenuEntry("绘制线框球面", 5);
	glutAddMenuEntry("绘制实体球面", 6);
	glutAddMenuEntry("绘制线框茶壶", 7);
	glutAddMenuEntry("绘制实体茶壶", 8);
//创建主菜单
	int nMainMenu = glutCreateMenu(ProcessMenu);
	glutAddSubMenu("绘制多面体", nGlutPolyMenu);
	glutAddSubMenu("绘制曲面体", nGlutCurveMenu);
// 单击右键显示菜单
glutAttachMenu(GLUT_RIGHT_BUTTON);	

	glutDisplayFunc(Display);
	glutReshapeFunc(ChangeSize);
	glutSpecialFunc(Specialkeys);
	Initial();
	glutMainLoop();
	return 0;
}










  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值