⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 五角星.txt

📁 一个基于VC++的程序 绘制五角星和多边形 建立基于单文档的MFC编写的绘图程序
💻 TXT
字号:
//   PentagonStar.cpp   
  //   OpenGL   sdudy   
  //   Demonstrates   OpenGL   GL_TRIANGLES   with   outline's   display   
  //                   
  //   Program   by   wangqingsheng.     03/24/6   
    
    
  #include   <windows.h>   
  #include   <gl/gl.h>   
  #include   <gl/glu.h>   
  #include   "glut.h"   
    
    
  //   Define   a   constant   for   the   value   of   PI   
  #define   GL_PI   3.1415f   
    
  //   Rotation   amounts   
  static   GLfloat   xRot   =   0.0f;   
  static   GLfloat   yRot   =   0.0f;   
    
  //   Flags   for   effects   
  #define   MODE_SOLID   0   
  #define   MODE_LINE     1   
  #define   MODE_POINT   2   
    
  int   iMode   =   MODE_SOLID;   
  GLboolean   bEdgeFlag   =   TRUE;   
    
  ///////////////////////////////////////////////////////////////////////////////   
  //   Reset   flags   as   appropriate   in   response   to   menu   selections   
  void   ProcessMenu(int   value)   
  {   
  switch(value)   
  {   
  case   1:   
  iMode   =   MODE_SOLID;   
  break;   
    
  case   2:   
  iMode   =   MODE_LINE;   
  break;   
    
  case   3:   
  iMode   =   MODE_POINT;   
  break;   
    
  case   4:   
  bEdgeFlag   =   TRUE;   
  break;   
    
  case   5:   
  default:   
  bEdgeFlag   =   FALSE;   
  break;   
  }   
    
  glutPostRedisplay();   
  }   
    
    
  //   Called   to   draw   scene   
  void   RenderScene(void)   
  {   
  //另外一组数据   
  /// double     radx[5]   =   {5.8779,-5.8779,-9.5106,-0.0000,9.5106};   
  // double     rady[5]   =   {8.0902,8.0902,-3.0902,-10.0000,-3.0902};   
  // double     Radx[5]   =   {38.0423,0.0000,-38.0423,-23.5114,23.5114};   
  // double     Rady[5]   =   {12.3607,40.0000,12.3607,-32.3607,-32.3607};   
    
  //内部五边形的数据   
  double     radx[5]   =   {7.0534,-7.0534,-11.4127,-0.0000,11.4127};   
  double     rady[5]   =   {9.7082,9.7082,-3.7082,-12.0000,-3.7082};   
  //外部五边形的数据   
  double     Radx[5]   =   {38.0423,0.0000,-38.0423,-23.5114,23.5114};   
  double     Rady[5]   =   {12.3607,40.0000,12.3607,-32.3607,-32.3607};   
  //   Clear   the   window   
  glClear(GL_COLOR_BUFFER_BIT);   
    
    
  //   Draw   back   side   as   a   polygon   only,   if   flag   is   set   
  if(iMode   ==   MODE_LINE)   
  glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);   
    
  if(iMode   ==   MODE_POINT)   
  glPolygonMode(GL_FRONT_AND_BACK,GL_POINT);   
    
  if(iMode   ==   MODE_SOLID)   
  glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);   
    
    
  //   Save   matrix   state   and   do   the   rotation   
  glPushMatrix();   
  glRotatef(xRot,   1.0f,   0.0f,   0.0f);   
  glRotatef(yRot,   0.0f,   1.0f,   0.0f);   
    
    
  //   Begin   the   triangles   
  glBegin(GL_TRIANGLES);   
    
  //按照逆时针的顺序画出直线   
  glEdgeFlag(bEdgeFlag);   
  glVertex2f(radx[1],rady[1]);   
  glEdgeFlag(TRUE);   
  glVertex2f(radx[0],rady[0]);   
  glVertex2f(Radx[1],Rady[1]);   
    
  glVertex2f(radx[1],rady[1]);   
  glVertex2f(Radx[2],Rady[2]);   
  glEdgeFlag(bEdgeFlag);   
  glVertex2f(radx[2],rady[2]);   
    
  glEdgeFlag(TRUE);   
  glVertex2f(radx[2],rady[2]);   
  glVertex2f(Radx[3],Rady[3]);   
  glEdgeFlag(bEdgeFlag);   
  glVertex2f(radx[3],rady[3]);   
  glEdgeFlag(TRUE);   
    
  glVertex2f(radx[3],rady[3]);   
  glVertex2f(Radx[4],Rady[4]);   
  glEdgeFlag(bEdgeFlag);   
  glVertex2f(radx[4],rady[4]);   
  glEdgeFlag(TRUE);   
    
  glVertex2f(radx[4],rady[4]);   
  glVertex2f(Radx[0],Rady[0]);   
  glEdgeFlag(bEdgeFlag);   
  glVertex2f(radx[0],rady[0]);   
  glEdgeFlag(TRUE);   
    
  //   Center   square   as   two   triangles   
    
  //画出内部的五边形,都设置为FLASE   
  glEdgeFlag(bEdgeFlag);   
  glVertex2f(radx[0],rady[0]);   
  glVertex2f(radx[1],rady[1]);   
  glVertex2f(radx[2],rady[2]);   
    
  glVertex2f(radx[3],rady[3]);   
  glVertex2f(radx[4],rady[4]);   
  glVertex2f(radx[0],rady[0]);   
  glVertex2f(radx[3],rady[3]);   
  glEdgeFlag(bEdgeFlag);   
  glVertex2f(radx[0],rady[0]);   
  glVertex2f(radx[2],rady[2]);   
  glEdgeFlag(TRUE);   
  glEnd();   
    
  //   Restore   transformations   
  glPopMatrix();   
    
  //   Flush   drawing   commands   
  glutSwapBuffers();   
  }   
    
  //   This   function   does   any   needed   initialization   on   the   rendering   
  //   context.     
  void   SetupRC()   
  {   
  //设置背景色为蓝色   
  glClearColor(0.1f,   0.5f,   1.0f,   1.0f   );   
    
  //   Set   drawing   color   to   green   
  glColor3f(0.0f,   1.0f,   0.0f);   
  }   
    
  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(key   >   356.0f)   
  xRot   =   0.0f;   
    
  if(key   <   -1.0f)   
  xRot   =   355.0f;   
    
  if(key   >   356.0f)   
  yRot   =   0.0f;   
    
  if(key   <   -1.0f)   
  yRot   =   355.0f;   
    
  //   Refresh   the   Window   
  glutPostRedisplay();   
  }   
    
    
  void   ChangeSize(int   w,   int   h)   
  {   
  GLfloat   nRange   =   100.0f;   
    
  //   Prevent   a   divide   by   zero   
  if(h   ==   0)   
  h   =   1;   
    
  //   Set   Viewport   to   window   dimensions   
          glViewport(0,   0,   w,   h);   
    
  //   Reset   projection   matrix   stack   
  glMatrixMode(GL_PROJECTION);   
  glLoadIdentity();   
    
  //   Establish   clipping   volume   (left,   right,   bottom,   top,   near,   far)   
          if   (w   <=   h)     
  glOrtho   (-nRange,   nRange,   -nRange*h/w,   nRange*h/w,   -nRange,   nRange);   
          else     
  glOrtho   (-nRange*w/h,   nRange*w/h,   -nRange,   nRange,   -nRange,   nRange);   
    
  //   Reset   Model   view   matrix   stack   
  glMatrixMode(GL_MODELVIEW);   
  glLoadIdentity();   
  }   
    
  int   main(int   argc,   char*   argv[])   
  {   
  int   nModeMenu;   
  int   nEdgeMenu;   
  int   nMainMenu;   
    
  glutInit(&argc,   argv);   
  //设置窗口显示模式   
  glutInitDisplayMode(GLUT_DOUBLE   |   GLUT_RGB   |   GLUT_DEPTH);   
  //设置窗口大小   
  glutInitWindowSize(1024,768);   
  //设置窗口显示标题   
  glutCreateWindow("五角星的显示");   
    
  //   Create   the   Menu   
  nModeMenu   =   glutCreateMenu(ProcessMenu);   
  glutAddMenuEntry("Solid",1);   
  glutAddMenuEntry("Outline",2);   
  glutAddMenuEntry("Points",3);   
    
  nEdgeMenu   =   glutCreateMenu(ProcessMenu);   
  glutAddMenuEntry("On",4);   
  glutAddMenuEntry("Off",5);   
    
  nMainMenu   =   glutCreateMenu(ProcessMenu);   
  glutAddSubMenu("Mode",   nModeMenu);   
  glutAddSubMenu("Edges",   nEdgeMenu);   
  glutAttachMenu(GLUT_RIGHT_BUTTON);   
    
  glutReshapeFunc(ChangeSize);   
  glutSpecialFunc(SpecialKeys);   
  glutDisplayFunc(RenderScene);   
  SetupRC();   
  glutMainLoop();   
    
  return   0;   
  }   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -