视频加载失败

课程

267 字
约 1 分钟

实验5 三维造型

计算机图形学labs/lab05-geometric-transformations·更新于 2026-09-15

实验5 三维造型

一、实验目的

了解常用的图形交互技术及实现方法,学习用户接口的程序设计;理解OpenGL中鼠标、键盘注册函数的使用;理解图形的层次模型的实现。

二、实验要求

  1. 使用键盘和菜单功能绘制不同的几何图形。

  2. 使用多级显示列表绘制模型。

三、实验学时

2学时

四、实验内容

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

程序框架:

#include <gl/glut.h>

static GLsizei iMode = 1;
static GLfloat xRot = 0.0f;  //x方向旋转参数
static GLfloat yRot = 0.0f;  //y方向旋转参数

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();
	glRotatef(xRot, 1.0f, 0.0f, 0.0f);  //旋转图形
	glRotatef(yRot, 0.0f, 1.0f, 0.0f);  //旋转图形
		
//指定需要绘制的图元
	switch(iMode)	{
		case 1:
			glutWireTetrahedron(); break;
		case 2:
			glutSolidTetrahedron(); break;
		case 3:
			glutWireOctahedron(); break;
		case 4:
			glutSolidOctahedron(); break;
		case 5:
			glutWireSphere(1.0f,15,15); break;
		case 6:
			glutSolidSphere(1.0f,15,15); break;
		case 7:
			glutWireTeapot(1.0f); break;
		case 8:
			glutSolidTeapot(1.0f); break;
		default: break;
	}
	glFlush(); 
}

//
void ProcessMenu(int value)
{
	iMode = value;  
	glutPostRedisplay();
}

void SpecialKeys(int key, int x, int y)
{
	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;
	if(xRot > 356.0f)	xRot = 0.0f;
	if(xRot < -1.0f)	xRot = 355.0f;
	if(yRot > 356.0f)	yRot = 0.0f;
	if(yRot < -1.0f)	yRot = 355.0f;
	glutPostRedisplay();
}

int main(int argc, char* argv[])
{
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);  
	glutInitWindowSize(400,400);                  
	glutInitWindowPosition(100,100);              
	glutCreateWindow("OpenGL模型绘制函数示例"); 
	
	//创建菜单并定义菜单回调函数
	int nGlutPolyMenu = glutCreateMenu(ProcessMenu);  
	glutAddMenuEntry("线框正四面体",1);               //创建GLUT多面体绘制菜单
	glutAddMenuEntry("实体正四面体",2);
	glutAddMenuEntry("线框正八面体",3);
	glutAddMenuEntry("实体正八面体",4);
	
	int nGlutCurveMenu = glutCreateMenu(ProcessMenu);  //创建GLUT曲面绘制菜单
	glutAddMenuEntry("线框球面",5);
	glutAddMenuEntry("实体球面",6);
	glutAddMenuEntry("线框茶壶",7);
	glutAddMenuEntry("实体茶壶",8);	

	int nMainMenu = glutCreateMenu(ProcessMenu);  //创建主菜单
	glutAddSubMenu("GLUT多面体", nGlutPolyMenu);
	glutAddSubMenu("GLUT曲面", nGlutCurveMenu);
	glutAttachMenu(GLUT_RIGHT_BUTTON);	

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

2、完成头歌实训平台实验内容:CG4-v1.0-三维造型(选做)。

Profile Image of the Author
Sonder
好想要技术
这是公告标题
这只是一个公告
分类
标签
站点信息
构建平台
GitHub Actions
博客版本
Firefly v6.16.7
文章许可
CC BY-NC-SA 4.0
文章目录