使用键盘和菜单功能绘制不同的几何图形,键盘的上、下、左、右键控制图形旋转,使用菜单选择绘制不同的图形。
#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;
}