#include <windows.h>
#include <gl/glut.h>
#include <gl/glaux.h>
#include <math.h>
#include <iostream>
using namespace std;
void init(void)
{
glClearColor(1.0,0.0,0.0,0.0);
glShadeModel(GL_FLAT);
}
void Draw(void)
{
glClearColor(1.0f,0.0f,0.0f,0.0f);
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
glColor3f(1.0,1.0,1.0);
glutSolidTeapot(100);//原茶壶
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glColor3f(0.0,0.0,1.0);
glTranslatef(100.0,50.0,0.0);
glRotatef(30.0, 0.0, 0.0, 1.0);//旋转后的茶壶
glutSolidTeapot(100);
glColor3f(0.0,1.0,1.0);
glTranslatef(30.0,10.0,0.0);
glutSolidTeapot(100);//平移后的茶壶
glEnable(GL_CLIP_PLANE1);
double ary[4] = {0.0,-150.0,0.0,0.0};
glClipPlane(GL_CLIP_PLANE1,ary);
glColor3f(1.0,0.0,1.0);
glRotatef(-50.0, 0.0, 0.0, 1.0);//再旋转裁剪后的茶壶
glutSolidTeapot(100);
glPopMatrix();
glFlush();
glutSwapBuffers();
}
void reshape(int w,int h)
{
glViewport(0,0,(GLsizei)w,(GLsizei)h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if (w <= h)
glOrtho(-300.0, 300.0, -300.0*(GLsizei)h/(GLsizei)w,
300.0*(GLsizei)h/(GLsizei)w, -300.0, 300.0);
else
glOrtho(-300.0*(GLsizei)w/(GLsizei)h,
300.0*(GLsizei)w/(GLsizei)h, -300.0, 300.0, -300.0, 300.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
int main(int argc,char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
glutInitWindowSize(500,500);
glutInitWindowPosition(100,100);
glutCreateWindow(argv[0]);
init();
glutDisplayFunc(Draw);
glutReshapeFunc(reshape);
glutMainLoop();
return 0;
}