课程
267 字
约 1 分钟
大三下
实验5 三维造型
计算机图形学labs/lab05-geometric-transformations·更新于 2026-09-15
实验5 三维造型
一、实验目的
了解常用的图形交互技术及实现方法,学习用户接口的程序设计;理解OpenGL中鼠标、键盘注册函数的使用;理解图形的层次模型的实现。
二、实验要求
-
使用键盘和菜单功能绘制不同的几何图形。
-
使用多级显示列表绘制模型。
三、实验学时
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-三维造型(选做)。













