zoukankan      html  css  js  c++  java
  • SDL2+OpenGL (1)绘制多边形

     1  #include <GL/glew.h>
     2  #include <SDL2/SDL.h>
     3  #include <SDL2/SDL_opengl.h>
     4  
     5  bool quit;
     6  SDL_Window* window;
     7  SDL_GLContext glContext;
     8  SDL_Event sdlEvent;
     9  void Init()
    10  {
    11      SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
    12      SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1);
    13      SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE,24);
    14      SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
    15      SDL_Init(SDL_INIT_EVERYTHING);
    16      window = SDL_CreateWindow("SDL+OpenGL", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,400,300,SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN );
    17      glContext = SDL_GL_CreateContext(window);
    18      SDL_GL_SetSwapInterval(1);
    19      glewInit();
    20  }
    21  void Draw()
    22  {
    23          glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    24          glLoadIdentity();
    25          glScaled(1.0f/10,1.0f/10,1.0f/10); //坐标系默认是[-1,1],这里先把坐标系拉伸一下,也可以用glViewport重置窗口大小
    26          //绘制三角形
    27          glTranslatef(-3.0f,0.0f,6.0f);
    28          glBegin(GL_TRIANGLES);
    29              glVertex3f(0.0f,1.0f,0.0f);
    30              glVertex3f(-1.0f,-1.0f,0.0f);
    31              glVertex3f(1.0f,-1.0f,0.0f);
    32          glEnd();
    33          //绘制矩形
    34          glTranslatef(3.0f,0.0f,0.0f);
    35          glBegin(GL_QUADS);
    36              glVertex3f(-1.0f,1.0f,0.0f);
    37              glVertex3f(1.0f,1.0f,0.0f);
    38              glVertex3f(1.0f,-1.0f,0.0f);
    39              glVertex3f(-1.0f,-1.0f,0.0f);
    40          glEnd();
    41          //绘制难看的多边形
    42          glTranslatef(3.0f,0.0f,0.0f);
    43          glBegin(GL_POLYGON);
    44              glVertex3f(0.0f, 3.0f,0.0f);
    45              glVertex3f(1.0f, 5.0f,0.0f);
    46              glVertex3f(2.0f, 2.0f,0.0f);
    47              glVertex3f(3.0f, 4.0f,0.0f);
    48              glVertex3f(4.0f, 1.0f,0.0f);
    49              glVertex3f(5.0f, 7.0f,0.0f);
    50          glEnd();
    51          //渲染
    52          SDL_GL_SwapWindow(window);
    53  }
    54  int main(int argc, char *argv[])
    55  {
    56      quit = false;
    57      Init();
    58      while (!quit)
    59      {
    60          while(SDL_PollEvent(&sdlEvent))
    61          {
    62              if(sdlEvent.type == SDL_QUIT)
    63              {
    64                  quit = true;
    65              }
    66          }
    67          Draw();
    68          SDL_Delay(16);
    69      }
    70      SDL_DestroyWindow(window);
    71      window = NULL;
    72      SDL_Quit();
    73      return 0;
    74  }
    

    运行结果

     

    给图形添加颜色

     1 void Draw()
     2   {
     3           glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
     4           glLoadIdentity();
     5           glScaled(1.0f/10,1.0f/10,1.0f/10);
     6           glTranslatef(-3.0f,0.0f,6.0f);
     7           glBegin(GL_TRIANGLES);
     8               glColor3f(1.0f,0.0f,0.0f);
     9               glVertex3f(0.0f,1.0f,0.0f);
    10               glColor3f(0.0f,1.0f,0.0f);
    11               glVertex3f(-1.0f,-1.0f,0.0f);
    12               glColor3f(0.0f,0.0f,1.0f);
    13               glVertex3f(1.0f,-1.0f,0.0f);
    14           glEnd();
    15           glColor3f(1.0f,1.0f,0.0f);
    16           glTranslatef(3.0f,0.0f,0.0f);
    17           glBegin(GL_QUADS);
    18               glVertex3f(-1.0f,1.0f,0.0f);
    19               glVertex3f(1.0f,1.0f,0.0f);
    20               glVertex3f(1.0f,-1.0f,0.0f);
    21               glVertex3f(-1.0f,-1.0f,0.0f);
    22           glEnd();
    23           glColor3f(0.0f,1.0f,1.0f);
    24           glTranslatef(3.0f,0.0f,0.0f);
    25           glBegin(GL_POLYGON);
    26               glVertex3f(0.0f, 3.0f,0.0f);
    27               glVertex3f(1.0f, 5.0f,0.0f);
    28               glVertex3f(2.0f, 2.0f,0.0f);
    29               glVertex3f(3.0f, 4.0f,0.0f);
    30               glVertex3f(4.0f, 1.0f,0.0f);
    31               glVertex3f(5.0f, 7.0f,0.0f);
    32           glEnd();
    33           SDL_GL_SwapWindow(window);
    34   }
    

     

    glRotatef旋转

     1 void Draw()
     2  {
     3          glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
     4          glLoadIdentity();
     5          glScaled(1.0f/10,1.0f/10,1.0f/10);
     6  
     7          glRotatef(120,1.0f,0.0f,0.0f);
     8  
     9          glTranslatef(-3.0f,0.0f,6.0f);
    10          glBegin(GL_TRIANGLES);
    11              glColor3f(1.0f,0.0f,0.0f);
    12              glVertex3f(0.0f,1.0f,0.0f);
    13              glColor3f(0.0f,1.0f,0.0f);
    14              glVertex3f(-1.0f,-1.0f,0.0f);
    15              glColor3f(0.0f,0.0f,1.0f);
    16              glVertex3f(1.0f,-1.0f,0.0f);
    17          glEnd();
    18          glColor3f(1.0f,1.0f,0.0f);
    19          glTranslatef(3.0f,0.0f,0.0f);
    20          glBegin(GL_QUADS);
    21              glVertex3f(-1.0f,1.0f,0.0f);
    22              glVertex3f(1.0f,1.0f,0.0f);
    23              glVertex3f(1.0f,-1.0f,0.0f);
    24              glVertex3f(-1.0f,-1.0f,0.0f);
    25          glEnd();
    26          glColor3f(0.0f,1.0f,1.0f);
    27          glTranslatef(3.0f,0.0f,0.0f);
    28          glBegin(GL_POLYGON);
    29              glVertex3f(0.0f, 3.0f,0.0f);
    30              glVertex3f(1.0f, 5.0f,0.0f);
    31              glVertex3f(2.0f, 2.0f,0.0f);
    32              glVertex3f(3.0f, 4.0f,0.0f);
    33              glVertex3f(4.0f, 1.0f,0.0f);
    34              glVertex3f(5.0f, 7.0f,0.0f);
    35          glEnd();
    36          SDL_GL_SwapWindow(window);
    37  }
    

     

  • 相关阅读:
    NOIP201208同余方程
    NOIP模拟赛 最佳组合
    NOIP模拟赛 拓展
    CF1253E Antenna Coverage(DP)
    LOJ6033「雅礼集训 2017 Day2」棋盘游戏 (博弈论,二分图,匈牙利算法)
    CF582E Boolean Function(DP,状态压缩,FMT)
    CF750G New Year and Binary Tree Paths(DP)
    Codeforces Round 596 题解
    AGC008E Next or Nextnext(组合计数,神奇思路)
    ARC082E ConvexScore(神奇思路)
  • 原文地址:https://www.cnblogs.com/CodeMIRACLE/p/5516841.html
Copyright © 2011-2022 走看看