2024年4月1日发(作者:)
#include
static GLfloat xRot = 0.0f;
static GLfloat yRot = 0.0f;
void Reshape(int w, int h)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(0.5f,0.5f,1.0f,0.5f);
GLfloat Scale;
if(h == 0)
h = 1;
glViewport(0, 0, w, h);
Scale = (GLfloat)w/(GLfloat)h;
glMatrixMode(GL_PROJECTION);
glLoadIdentity()
gluPerspective(40.0f, Scale, 1.0, 40.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void SpecialKeys(int key, int x, int y)
{
if(key == GLUT_KEY_UP)
xRot-= 1.0f;
if(key == GLUT_KEY_DOWN)
xRot += 1.0f;
if(key == GLUT_KEY_LEFT)
yRot -= 1.0f;
if(key == GLUT_KEY_RIGHT)
yRot += 1.0f;
xRot = (GLfloat)((const int)xRot % 360);
yRot = (GLfloat)((const int)yRot % 360);
glutPostRedisplay();
}
void Display(void)
{
GLUquadricObj *pObj;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glTranslatef(0.0f, -1.0f, -5.0f);
glRotatef(xRot, 1.0f, 0.0f, 0.0f);
glRotatef(yRot, 0.0f, 1.0f, 0.0f);
pObj = gluNewQuadric();
gluQuadricNormals(pObj, GLU_SMOOTH);
// Main Body
glPushMatrix();
glColor3f(1.0f, 1.0f, 1.0f);
gluSphere(pObj, .40f, 26, 13); // Bottom
glTranslatef(0.0f, .550f, 0.0f); // Mid section
gluSphere(pObj, .3f, 26, 13);
glTranslatef(0.0f, 0.45f, 0.0f); // Head
gluSphere(pObj, 0.24f, 26, 13);
// Eyes
glColor3f(0.0f, 0.0f, 0.0f);
glTranslatef(0.1f, 0.1f, 0.21f);
gluSphere(pObj, 0.02f, 26, 13);
glTranslatef(-0.2f, 0.0f, 0.0f);
gluSphere(pObj, 0.02f, 26, 13);
// Nose
glColor3f(1.0f, 0.3f, 0.3f);
glTranslatef(0.1f, -0.12f, 0.0f);
gluCylinder(pObj, 0.04f, 0.0f, 0.3f, 26, 13);
glPopMatrix();
// Hat
glPushMatrix();
glColor3f(0.0f, 0.0f, 0.0f);
glTranslatef(0.0f, 1.17f, 0.0f);
glRotatef(-90.0f, 1.0f, 0.0f, 0.0f);
gluCylinder(pObj, 0.17f, 0.17f, 0.4f, 26, 13);
// Hat brim
glDisable(GL_CULL_FACE);
gluDisk(pObj, 0.17f, 0.28f, 26, 13);
glEnable(GL_CULL_FACE);
glTranslatef(0.0f, 0.0f, 0.40f);
gluDisk(pObj, 0.0f, 0.17f, 26, 13);
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(800, 600);
glutCreateWindow("Snowman");
glutReshapeFunc(Reshape);
glutSpecialFunc(SpecialKeys);
glutDisplayFunc(Display);
glutMainLoop();
return 0;
}
发布评论