zoukankan      html  css  js  c++  java
  • SDL2+OpenGL (3)纹理映射

     

      1  #include <GL/glew.h>
      2  #include <SDL2/SDL.h>
      3  #include <SDL2/SDL_opengl.h>
      4  #include <SDL2/SDL_image.h>
      5  bool quit;
      6  SDL_Window* window;
      7  SDL_GLContext glContext;
      8  SDL_Event sdlEvent;
      9  GLfloat     xrot;
     10  GLfloat     yrot;
     11  GLfloat     zrot;
     12  GLuint      texture;
     13  
     14  void Init()
     15  {
     16      SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
     17      SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1);
     18      SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE,24);
     19      SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
     20      SDL_Init(SDL_INIT_EVERYTHING);
     21      window = SDL_CreateWindow("SDL+OpenGL", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,400,300,SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN );
     22      glContext = SDL_GL_CreateContext(window);
     23      SDL_GL_SetSwapInterval(1);
     24      glewInit();
     25      glEnable(GL_TEXTURE_2D);
     26      glShadeModel(GL_SMOOTH);
     27      glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
     28      glClearDepth(1.0f);
     29      glEnable(GL_DEPTH_TEST);
     30      glDepthFunc(GL_LEQUAL);
     31      glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
     32  }
     33  void LoadImage()
     34  {
     35      SDL_Surface *tmp=IMG_Load("huaji.jpg");
     36      tmp = SDL_ConvertSurfaceFormat(tmp,SDL_PIXELFORMAT_ABGR8888,0);
     37      texture=gluBuild2DMipmaps(GL_TEXTURE_2D,4,tmp->w,tmp->h,GL_RGBA,GL_UNSIGNED_BYTE,tmp->pixels);
     38      SDL_FreeSurface(tmp);
     39  }
     40  void Draw()
     41  {
     42  
     43      glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
     44      glLoadIdentity();
     45      glScaled(1.0f/10,1.0f/10,1.0f/10);
     46  
     47      glRotatef(xrot,1.0f,0.0f,0.0f);
     48      glRotatef(yrot,0.0f,1.0f,0.0f);
     49      glRotatef(zrot,0.0f,0.0f,1.0f);
     50  
     51      glBindTexture(GL_TEXTURE_2D, texture);
     52      glBegin(GL_QUADS);
     53          glTexCoord2f(0.0f, 0.0f); glVertex3f(-3.0f, -3.0f,  3.0f);
     54          glTexCoord2f(1.0f, 0.0f); glVertex3f( 3.0f, -3.0f,  3.0f);
     55          glTexCoord2f(1.0f, 1.0f); glVertex3f( 3.0f,  3.0f,  3.0f);
     56          glTexCoord2f(0.0f, 1.0f); glVertex3f(-3.0f,  3.0f,  3.0f);
     57  
     58          glTexCoord2f(1.0f, 0.0f); glVertex3f(-3.0f, -3.0f, -3.0f);
     59          glTexCoord2f(1.0f, 1.0f); glVertex3f(-3.0f,  3.0f, -3.0f);
     60          glTexCoord2f(0.0f, 1.0f); glVertex3f( 3.0f,  3.0f, -3.0f);
     61          glTexCoord2f(0.0f, 0.0f); glVertex3f( 3.0f, -3.0f, -3.0f);
     62  
     63          glTexCoord2f(0.0f, 1.0f); glVertex3f(-3.0f,  3.0f, -3.0f);
     64          glTexCoord2f(0.0f, 0.0f); glVertex3f(-3.0f,  3.0f,  3.0f);
     65          glTexCoord2f(1.0f, 0.0f); glVertex3f( 3.0f,  3.0f,  3.0f);
     66          glTexCoord2f(1.0f, 1.0f); glVertex3f( 3.0f,  3.0f, -3.0f);
     67  
     68          glTexCoord2f(1.0f, 1.0f); glVertex3f(-3.0f, -3.0f, -3.0f);
     69          glTexCoord2f(0.0f, 1.0f); glVertex3f( 3.0f, -3.0f, -3.0f);
     70          glTexCoord2f(0.0f, 0.0f); glVertex3f( 3.0f, -3.0f,  3.0f);
     71          glTexCoord2f(1.0f, 0.0f); glVertex3f(-3.0f, -3.0f,  3.0f);
     72  
     73          glTexCoord2f(1.0f, 0.0f); glVertex3f( 3.0f, -3.0f, -3.0f);
     74          glTexCoord2f(1.0f, 1.0f); glVertex3f( 3.0f,  3.0f, -3.0f);
     75          glTexCoord2f(0.0f, 1.0f); glVertex3f( 3.0f,  3.0f,  3.0f);
     76          glTexCoord2f(0.0f, 0.0f); glVertex3f( 3.0f, -3.0f,  3.0f);
     77  
     78          glTexCoord2f(0.0f, 0.0f); glVertex3f(-3.0f, -3.0f, -3.0f);
     79          glTexCoord2f(1.0f, 0.0f); glVertex3f(-3.0f, -3.0f,  3.0f);
     80          glTexCoord2f(1.0f, 1.0f); glVertex3f(-3.0f,  3.0f,  3.0f);
     81          glTexCoord2f(0.0f, 1.0f); glVertex3f(-3.0f,  3.0f, -3.0f);
     82      glEnd();
     83  
     84      xrot+=0.3f;
     85      yrot+=0.2f;
     86      zrot+=0.4f;
     87      SDL_GL_SwapWindow(window);
     88  }
     89  int main(int argc, char *argv[])
     90  {
     91      quit = false;
     92      Init();
     93      LoadImage();
     94      while (!quit)
     95      {
     96          while(SDL_PollEvent(&sdlEvent))
     97          {
     98              if(sdlEvent.type == SDL_QUIT)
     99              {
    100                  quit = true;
    101              }
    102          }
    103          Draw();
    104          SDL_Delay(16);
    105      }
    106      SDL_DestroyWindow(window);
    107      window = NULL;
    108      SDL_Quit();
    109      return 0;
    110  }
  • 相关阅读:
    面试题58:翻转字符串
    面试题57_2:和为S的连续正数序列
    面试题57:和为S的数字
    面试题56:数组中数字出现的次数
    面试题55_2:平衡二叉树
    面试题54:二叉搜索树的第k大节点
    面试题55_1:二叉树的深度
    tortoisegit 本地创建的分支 push github
    TortoiseGit 拉取分支
    tortoiseGIT 本地分支创建合并
  • 原文地址:https://www.cnblogs.com/CodeMIRACLE/p/5520058.html
Copyright © 2011-2022 走看看