从本地加载纹理【基于SOIL库】
        【摘要】 
                    本文参考自:http://blog.csdn.net/dreamcs/article/details/7696069 
不过他是利用GLUT和GLAUX库加载的位图,我是基于SOIL(Simple OpenGL Image Library)库。 
  
SOIL库除了可以直接将 2D/3D 图像加载成OpenGL纹理以外,还可以返回图像...
    
    
    
    本文参考自:http://blog.csdn.net/dreamcs/article/details/7696069
不过他是利用GLUT和GLAUX库加载的位图,我是基于SOIL(Simple OpenGL Image Library)库。
 
SOIL库除了可以直接将 2D/3D 图像加载成OpenGL纹理以外,还可以返回图像的字节数据——SOIL_load_image 并将其保存为其他格式图片——SOIL_save_image(但要注意主动释放——SOIL_free_image_data),还能够截取屏幕——SOIL_save_screenshot。
 
关于SOIL库的资料可以移步 http://lonesock.net/soil.html(网站只提供基于VC工程的源码,需要自己简单编译一下)
 
废话不多说,代码如下:
 
  
   - 
    
     
    
    
     
      void init(void)
     
    
- 
    
     
    
    
     
      {
     
    
- 
    
     
    
    
         glClearColor(0.0, 0.0, 0.0, 0.0);
     
    
- 
    
     
    
    
         glShadeModel(GL_FLAT);
     
    
- 
    
     
    
    
         glEnable(GL_DEPTH_TEST);
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     	// ------------------------------------
     
    
- 
    
     
    
    
     
          texName = SOIL_load_OGL_texture
     
    
- 
    
     
    
    
     
                    (
     
    
- 
    
     
    
    
                       "../micky.png",
     
    
- 
    
     
    
    
     
                        SOIL_LOAD_AUTO,
     
    
- 
    
     
    
    
     
                        SOIL_CREATE_NEW_ID,
     
    
- 
    
     
    
    
     
                        SOIL_FLAG_MIPMAPS | SOIL_FLAG_INVERT_Y | SOIL_FLAG_NTSC_SAFE_RGB | SOIL_FLAG_COMPRESS_TO_DXT
     
    
- 
    
     
    
    
     
                    );
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
         /* check for an error during the load process */
     
    
- 
    
     
    
    
         if (0 == texName)
     
    
- 
    
     
    
    
     
          {
     
    
- 
    
     
    
    
             printf("SOIL loading error: '%s'\n", SOIL_last_result());
     
    
- 
    
     
    
    
     
          }
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     	// 按字节对齐
     
    
- 
    
     
    
    
         glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
         // 区别1
     
    
- 
    
     
    
    
         //glGenTextures(1, &texName);
     
    
- 
    
     
    
    
         glBindTexture(GL_TEXTURE_2D, texName);
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
         glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
     
    
- 
    
     
    
    
         glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
     
    
- 
    
     
    
    
         glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
     
    
- 
    
     
    
    
         glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
         // 区别2
     
    
- 
    
     
    
    
         //glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, imageRec->sizeX, imageRec->sizeX,
     
    
- 
    
     
    
    
         // 0, GL_RGB, GL_UNSIGNED_BYTE, imageRec->data);
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      }
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      void display(void)
     
    
- 
    
     
    
    
     
      {
     
    
- 
    
     
    
    
         glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
     
    
- 
    
     
    
    
         glEnable(GL_TEXTURE_2D);
     
    
- 
    
     
    
    
         glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
         glBindTexture(GL_TEXTURE_2D, texName);
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
         glBegin(GL_QUADS);
     
    
- 
    
     
    
    
     	// 左面
     
    
- 
    
     
    
    
         glTexCoord2f(0.0, 0.0);
     
    
- 
    
     
    
    
         glVertex3f(-2.0, -1.0, 0.0);
     
    
- 
    
     
    
    
         glTexCoord2f(0.0, 1.0);
     
    
- 
    
     
    
    
         glVertex3f(-2.0, 1.0, 0.0);
     
    
- 
    
     
    
    
         glTexCoord2f(1.0, 1.0);
     
    
- 
    
     
    
    
         glVertex3f(0.0, 1.0, 0.0);
     
    
- 
    
     
    
    
         glTexCoord2f(1.0, 0.0);
     
    
- 
    
     
    
    
         glVertex3f(0.0, -1.0, 0.0);
     
    
- 
    
     
    
    
     	// 右面
     
    
- 
    
     
    
    
         glTexCoord2f(0.0, 0.0);
     
    
- 
    
     
    
    
         glVertex3f(1.0, -1.0, 0.0);
     
    
- 
    
     
    
    
         glTexCoord2f(0.0, 1.0);
     
    
- 
    
     
    
    
         glVertex3f(1.0, 1.0, 0.0);
     
    
- 
    
     
    
    
         glTexCoord2f(1.0, 1.0);
     
    
- 
    
     
    
    
         glVertex3f(2.41421, 1.0, -1.41421);
     
    
- 
    
     
    
    
         glTexCoord2f(1.0, 0.0);
     
    
- 
    
     
    
    
         glVertex3f(2.41421, -1.0, -1.41421);
     
    
- 
    
     
    
    
         glEnd();
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
         glFlush();	// 与单缓冲对应
     
    
- 
    
     
    
    
         // glDisable(GL_TEXTURE_2D);
     
    
- 
    
     
    
    
         glBindTexture(GL_TEXTURE_2D, 0);
     
    
- 
    
     
    
    
     
      }
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      void reshape(int w, int h)
     
    
- 
    
     
    
    
     
      {
     
    
- 
    
     
    
    
         glViewport(0, 0, (GLsizei)w, (GLsizei)h);
     
    
- 
    
     
    
    
         glMatrixMode(GL_PROJECTION);
     
    
- 
    
     
    
    
         glLoadIdentity();
     
    
- 
    
     
    
    
         gluPerspective(60.0, (GLfloat)w / (GLfloat)h, 1.0, 30.0);	// ☆
     
    
- 
    
     
    
    
         glMatrixMode(GL_MODELVIEW);
     
    
- 
    
     
    
    
         glLoadIdentity();
     
    
- 
    
     
    
    
         glTranslatef(0.0, 0.0, -3.6);
     
    
- 
    
     
    
    
     
      }
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      int main(int argc, char **argv)
     
    
- 
    
     
    
    
     
      {
     
    
- 
    
     
    
    
         glutInit(&argc, argv);
     
    
- 
    
     
    
    
         // 单缓冲
     
    
- 
    
     
    
    
         glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
     
    
- 
    
     
    
    
         glutInitWindowSize(640, 640);
     
    
- 
    
     
    
    
         glutInitWindowPosition(100, 100);
     
    
- 
    
     
    
    
         glutCreateWindow(argv[0]);
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
         init();
     
    
- 
    
     
    
    
         glutDisplayFunc(display);
     
    
- 
    
     
    
    
         glutReshapeFunc(reshape);
     
    
- 
    
     
    
    
         glutMainLoop();
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
         return 0;
     
    
- 
    
     
    
    
     
      }
     
    
 (比如创建OpenGL 上下文 和 初始化GLEW扩展)
 
效果图所示:

 
 
 
文章来源: panda1234lee.blog.csdn.net,作者:panda1234lee,版权归原作者所有,如需转载,请联系作者。
原文链接:panda1234lee.blog.csdn.net/article/details/53009017
        【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
            cloudbbs@huaweicloud.com
        
        
        
        
        
        
        - 点赞
- 收藏
- 关注作者
 
             
           
评论(0)