Advertisement
dllbridge

neWLego 1_9_2

Aug 12th, 2019
479
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.83 KB | None | 0 0
  1. ///////////////////////////////////////////////////////
  2. void InitMyOpenGL()                                  //                                      Создадим OpenGL-контекст
  3. {
  4.      
  5.      Windows = 1;
  6.        
  7.      HGLRC   hglrc;
  8.      PIXELFORMATDESCRIPTOR   pfd;
  9.      int iPixelFormat;
  10.      
  11.      memset(&pfd, 0, sizeof(PIXELFORMATDESCRIPTOR));
  12.      
  13.      pfd.nSize     = sizeof(PIXELFORMATDESCRIPTOR);
  14.  
  15.      pfd.nVersion = 1;
  16.      
  17.      pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL;
  18.      pfd.iPixelType = PFD_TYPE_RGBA;
  19.      pfd.cColorBits = 24;    
  20.      pfd.cDepthBits = 32;
  21.      pfd.iLayerType = PFD_MAIN_PLANE;
  22.      
  23.      
  24.      hdc = GetDC(hWnd);
  25.      iPixelFormat = ChoosePixelFormat(hdc, &pfd);            // int ChoosePixelFormat(HDC, const PIXELFORMATDESCRIPTOR)
  26.      SetPixelFormat(hdc, iPixelFormat, &pfd);                    // BOOL SetPixelFormat(HDC hDC, inl pixelFormat, const PIXELFORMATDESCRIPTOR)
  27.      hglrc = wglCreateContext(hdc);                                                //   HGLRC wglCreateContext(HDC hDC)
  28.      if(hglrc) wglMakeCurrent(hdc, hglrc);
  29. }
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36. ///////////////////////////////////////////////////////
  37. void ResizeMyOpenGL()                                //      Подстраиваемся, при изменении размеров окна пользователем
  38. {
  39.      RECT   rc;
  40.      
  41.      GetClientRect(hWnd, &rc);
  42.      glViewport(0, 0, rc.right, rc.bottom);
  43.      glMatrixMode(GL_PROJECTION);
  44.      glLoadIdentity();     
  45. }
  46.  
  47.  
  48.  
  49. ///////////////////////////////////////////////////////
  50. void CloseMyOpenGL()                                 //                                        Закроем OpenGL-контекст
  51. {
  52.  
  53.      HGLRC   hglrc;
  54.    
  55.      hglrc = wglGetCurrentContext();
  56.      if(hglrc)
  57.      {
  58.         hdc = wglGetCurrentDC();   
  59.         wglMakeCurrent(0, 0);
  60.         ReleaseDC(hWnd, hdc);
  61.         wglDeleteContext(hglrc);                                               //   BOOL wglDeleteContext(HGLRC hGLRC)
  62.      }
  63. }
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72.  
  73.  
  74. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  75. /////////////////////////////////////////////             Examples              ///////////////////////////////////////
  76. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  77. ////////////////////////////////////////////////////////////////////
  78. void DrawMyExampleOpenGL_1()                                      //
  79. {
  80.    
  81.     GLubyte fillpattern[128];
  82.     glOrtho(-400, 400, -300, 300, -1, 1);
  83. //  gluOrtho2D(-400, 400, -300, 300);          //   -lglu32
  84.     glMatrixMode(GL_MODELVIEW);
  85.     glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
  86.     glClear(GL_COLOR_BUFFER_BIT);
  87.    
  88.     glColor3f(0.4, 0.4, 0.4);                                                    //        Устанавливаем цвет
  89.     glLineWidth(1.0f) ;                                                         //         Толщина линии
  90.     glEnable(GL_LINE_STIPPLE);                                                 //          Включает пунктирный режим
  91.     glLineStipple(3 , 0x08ff);                                                //  Штрихпунктир ( задает вид пунктира )    
  92.    
  93.     glBegin(GL_LINES);
  94.     glVertex2f(-400, 0);
  95.     glVertex2f( 400, 0);
  96.     glEnd();
  97.    
  98.     glBegin(GL_LINES);
  99.     glVertex2f(0, 300);
  100.     glVertex2f(0,-300) ;
  101.     glEnd();
  102.     glDisable(GL_LINE_STIPPLE);                                              //          вЫключает пунктирный режим
  103.    
  104.     glColor3f(0.1, 0.1, 0.75);
  105.     glPointSize(10) ;
  106.     glBegin(GL_POINTS) ;
  107.     glVertex2f(0, 0);
  108.     glEnd();
  109.    
  110.     glLineWidth(2.0f) ;
  111.     glBegin(GL_LINE_STRIP) ;
  112.     for(int i=0; i<10; i++)
  113.     {
  114.       glVertex2f(-350+70*i, 60);
  115.       glVertex2f (-315+70*i,-60);
  116.     }
  117.     glEnd();
  118.    
  119.     glColor3f(0.0, 0.3, 0.0);
  120.     glLineWidth(1.0f);
  121.  
  122.     glBegin(GL_TRIANGLES);
  123.     glVertex2f(-300, 100);
  124.     glVertex2f(-200, 240);
  125.     glVertex2f(-100, 100);
  126.     glEnd();
  127.    
  128.     glColor3f(0.4, 0.1, 0.6);
  129.     glBegin(GL_QUADS);
  130.     glVertex2f(-50, 150);
  131.     glVertex2f(200, 200);
  132.     glVertex2f(250, 150);
  133.     glVertex2f(200, 100);
  134.     glEnd();
  135.    
  136.     memset(fillpattern,0,sizeof(fillpattern));
  137.     for(int j=0; j <16; j++)
  138.     for(int i=0; i < 2; i++)
  139.     {
  140.       fillpattern[j*4+i] = 0xff;
  141.       fillpattern[64+j*4+i+2] = 0xff;
  142.     }
  143.     glColor3f(0.4, 0.0, 0.2);
  144.     glPointSize(1);
  145.     glLineWidth(1.0f);
  146.     glPolygonStipple(fillpattern);
  147.     glEnable(GL_POLYGON_STIPPLE);
  148.     glBegin(GL_POLYGON);
  149.     glVertex2f(-300, -150);
  150.     glVertex2f(-200, - 80);
  151.     glVertex2f(   0, -100);
  152.     glVertex2f( 200, -200);
  153.     glVertex2f(-100, -250);
  154.     glEnd();
  155.     glDisable(GL_POLYGON_STIPPLE);
  156.     glFinish();
  157. }
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164. //////////////////////////////////////////////////////////////////////
  165. void NormalVector(float *x, float *y, float *z,                     //
  166.                   float x1, float y1, float z1,
  167.                   float x2, float y2, float z2,
  168.                   float x3, float y3, float z3)
  169. {
  170.    
  171.     *x =  (y2-y1)*(z3-z1) - (y3-y1)*(z2-z1);
  172.     *y = -(x2-x1)*(z3-z1) - (x3-x1)*(z2-z1);
  173.     *z =  (x2-x1)*(y3-y1) - (x3-x1)*(y2-y1);
  174. }
  175.  
  176. //////////////////////////////////////////////////////////////////////
  177. void DrawMyExampleOpenGL_2()                                        //
  178. {
  179.    
  180.      RECT rc;
  181.      float nx,ny,nz;
  182.      GLfloat lightpos[4] = {3,3,4,1};
  183.      GLfloat lightdirection[3] = {-0.5, -0.6, -0.7};
  184.      glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
  185.      glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  186.      glClearDepth(1.0);
  187.      glEnable(GL_DEPTH_TEST);
  188.  
  189.      GetClientRect(hWnd,&rc);
  190.      glMatrixMode(GL_MODELVIEW);
  191.      glLoadIdentity();
  192.      gluPerspective(50, (double)rc.right/rc.bottom, 1, 40);
  193.    
  194.      glTranslatef(0, 0, -10);
  195.      glRotatef( 27, 1, 0, 0);
  196.      glRotatef(-19, 0, 1, 0);
  197.    
  198.      glLightfv(GL_LIGHT0,GL_POSITION,lightpos);
  199.      glLightfv(GL_LIGHT0,GL_SPOT_DIRECTION,lightdirection);
  200.      glLightf (GL_LIGHT0,GL_SPOT_EXPONENT,4);
  201.      glLightf (GL_LIGHT0,GL_SPOT_CUTOFF,50);
  202.      glEnable (GL_LIGHT0);
  203.      glEnable (GL_LIGHTING);
  204.      glEnable (GL_COLOR_MATERIAL);
  205.      glEnable (GL_NORMALIZE);
  206.    
  207.      glColor3f(0.5, 1, 0);
  208.      NormalVector(&nx, &ny, &nz, 0, 4,    0,
  209.                                  2, 0.7,  2,
  210.                                  2, 0.7, -2);
  211.      glNormal3f(nx,ny,nz);
  212.      glBegin(GL_TRIANGLES);
  213.      glVertex3f(0, 4, 0);
  214.      glVertex3f(2, 0.7, 2);
  215.      glVertex3f(2, 0.7, -2);
  216.      glEnd();
  217.      NormalVector(&nx, &ny, &nz, 0, 4  , 0,
  218.                                 -2, 0.7, 2,
  219.                                  2, 0.7, 2);
  220.      glNormal3f(nx, ny, nz);
  221.      glBegin (GL_TRIANGLES);
  222.      glVertex3f( 0, 4,   0);
  223.      glVertex3f(-2, 0.7, 2);
  224.      glVertex3f( 2, 0.7, 2);
  225.      glEnd();
  226.    
  227.      glNormal3f(0, 1, 0);
  228.      for (int j=-5;j<5;j++)
  229.      {
  230.         for (int i=-5;i<5;i++)
  231.         {
  232.           if((abs(i+j) % 2) == 0) glColor3f(1,0,0);
  233.           else                    glColor3f(1,1,1);
  234.           glBegin(GL_QUADS);
  235.           glVertex3f(i, 0, j);
  236.           glVertex3f(i+1, 0, j);
  237.           glVertex3f(i+1, 0, j+1);
  238.           glVertex3f(i, 0, j+1);
  239.           glEnd();
  240.         }
  241.      }
  242.      glFinish();
  243. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement