1、绘制一个三维几何图形,如:球、立方体、棱柱、棱锥等。
2、对绘制的三维几何图形实现平移、旋转、变比的基本变换。
3、编程实现凸多面体的隐藏面和隐藏线的消隐。

解决方案 »

  1.   

    #include <GL/glut.h>
    #include <stdlib.h>void init(void) 
    {
       glClearColor (0.0, 0.0, 0.0, 0.0);
       glShadeModel (GL_FLAT);
    }void display(void)
    {
       glClear (GL_COLOR_BUFFER_BIT);
       glColor3f (1.0, 1.0, 1.0);
       glLoadIdentity ();             /* clear the matrix */
               /* viewing transformation  */
       gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
       glScalef (1.0, 2.0, 1.0);      /* modeling transformation */ 
       glutWireCube (1.0);
       glFlush ();
    }void reshape (int w, int h)
    {
       glViewport (0, 0, (GLsizei) w, (GLsizei) h); 
       glMatrixMode (GL_PROJECTION);
       glLoadIdentity ();
       glFrustum (-1.0, 1.0, -1.0, 1.0, 1.5, 20.0);
       glMatrixMode (GL_MODELVIEW);
    }void keyboard(unsigned char key, int x, int y)
    {
       switch (key) {
          case 27:
             exit(0);
             break;
       }
    }int main(int argc, char** argv)
    {
       glutInit(&argc, argv);
       glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
       glutInitWindowSize (500, 500); 
       glutInitWindowPosition (100, 100);
       glutCreateWindow (argv[0]);
       init ();
       glutDisplayFunc(display); 
       glutReshapeFunc(reshape);
       glutKeyboardFunc(keyboard);
       glutMainLoop();
       return 0;
    }
    这是绘制立方体的
      

  2.   

    #include <GL/glut.h>
    #include <stdlib.h>static GLfloat spin = 0.0;void display(void)
    {
       glClear(GL_COLOR_BUFFER_BIT);
       glPushMatrix();
       glRotatef(spin, 0.0, 0.0, 1.0);
       glColor3f(1.0, 1.0, 1.0);
       glRectf(-25.0, -25.0, 25.0, 25.0);
       glPopMatrix();   glutSwapBuffers();
    }void spinDisplay(void)
    {
       spin = spin + 2.0;
       if (spin > 360.0)
          spin = spin - 360.0;
       glutPostRedisplay();
    }void init(void) 
    {
       glClearColor (0.0, 0.0, 0.0, 0.0);
       glShadeModel (GL_FLAT);
    }void reshape(int w, int h)
    {
       glViewport (0, 0, (GLsizei) w, (GLsizei) h);
       glMatrixMode(GL_PROJECTION);
       glLoadIdentity();
       glOrtho(-50.0, 50.0, -50.0, 50.0, -1.0, 1.0);
       glMatrixMode(GL_MODELVIEW);
       glLoadIdentity();
    }void mouse(int button, int state, int x, int y) 
    {
       switch (button) {
          case GLUT_LEFT_BUTTON:
             if (state == GLUT_DOWN)
                glutIdleFunc(spinDisplay);
             break;
          case GLUT_MIDDLE_BUTTON:
          case GLUT_RIGHT_BUTTON:
             if (state == GLUT_DOWN)
                glutIdleFunc(NULL);
             break;
          default:
             break;
       }
    }
       
    /* 
     *  Request double buffer display mode.
     *  Register mouse input callback functions
     */
    int main(int argc, char** argv)
    {
       glutInit(&argc, argv);
       glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);
       glutInitWindowSize (250, 250); 
       glutInitWindowPosition (100, 100);
       glutCreateWindow (argv[0]);
       init ();
       glutDisplayFunc(display); 
       glutReshapeFunc(reshape); 
       glutMouseFunc(mouse);
       glutMainLoop();
       return 0;   /* ANSI C requires main to return int. */
    }
    这是旋转的正方形
    这些都是很简单的例子,,给你参考
      

  3.   

    怎么看这个问题也不像是一个基于已有的三维平台比如opengl或者d3d的要求
    更像是一个学图形学理论的试验题目1,2,3是同一个问题的三个不同的方面第一个问题,解决了三维空间物体的平面绘制就可以了,这个是绘制流程的最底层的东西
    第二个问题是控制矩阵的问题,控制矩阵在显示流程当中如何体现是体系结构的问题
    第三个问题,为三角形定义出法向量,朝向相机的才绘制,否则的不绘制如果你是在学计算机图形学这门课的话, 就真应该好好看书去了, 书上都有的最基本的东西
      

  4.   

    如果用OpenGL来编就很简单,如果只用C++来编,那就要好好学一学《计算机图形学》了