首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 游戏天堂 > 游戏开发 > OpenGL中不用AUX库来加载BMP图片作为纹理
【标  题】:OpenGL中不用AUX库来加载BMP图片作为纹理
【关键字】:OpenGL,AUX,BMP
【来  源】:http://blog.csdn.net/skyman_2001/archive/2006/05/28/759305.aspx

OpenGL中不用AUX库来加载BMP图片作为纹理


    大家在OpenGL中一般是用aux库的auxDIBImageLoad()函数来加载BMP格式的图片来作为纹理,这个确实是比较简单易用,但aux库的性能不佳,经常会出问题,稳定性较差。所以一般最好不要用aux库,可以用glut库,但glut库没有纹理加载函数。而有些程序是直接读取BMP格式来获得图像数据,从而生成纹理的,这种方法虽然很强大,但比较复杂,需要了解BMP的格式,对初学者比较困难。而下面的一段程序是用windows的API函数LoadImage()来实现这个功能,这种实现方法很简单,可以说比auxDIBImageLoad()函数复杂不了多少。

    首先,加上头文件:

    #include <gl\glext.h>

    这是因为后面的GL_BGR_EXT是定义在这个头文件里的,因为BMP格式是按Blue,Green,Red顺序储存图像数据的,这与OpenGL中正好相反。GL_BGR_EXT就是完成两者之间的转换的。

    下面就是不用AUX库来加载BMP图片作为纹理的函数:

bool LoadTexture(LPTSTR szFileName, GLuint &texid)     // Creates Texture From A Bitmap File
{
 HBITMAP hBMP;             // Handle Of The Bitmap
 BITMAP BMP;             // Bitmap Structure

 glGenTextures(1, &texid);          // Create The Texture
 hBMP=(HBITMAP)LoadImage(GetModuleHandle(NULL), szFileName, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION | LR_LOADFROMFILE );

 if (!hBMP)              // Does The Bitmap Exist?
  return FALSE;            // If Not Return False

 GetObject(hBMP, sizeof(BMP), &BMP);        // Get The Object
                 // hBMP:        Handle To Graphics Object
                 // sizeof(BMP): Size Of Buffer For Object Information
                 // &BMP:        Buffer For Object Information

 glPixelStorei(GL_UNPACK_ALIGNMENT, 4);       // Pixel Storage Mode (Word Alignment / 4 Bytes)

 // Typical Texture Generation Using Data From The Bitmap
 glBindTexture(GL_TEXTURE_2D, texid);        // Bind To The Texture ID
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); // Linear Min Filter
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); // Linear Mag Filter
 glTexImage2D(GL_TEXTURE_2D, 0, 3, BMP.bmWidth, BMP.bmHeight, 0, GL_BGR_EXT, GL_UNSIGNED_BYTE, BMP.bmBits);

 DeleteObject(hBMP);            // Delete The Object

 return TRUE;             // Loading Was Successful
}

    简单吧,以后就用这个函数来加载BMP图片作为纹理吧,很方便的!

    我的BLOG:http://sm3d.126.com,QQ:175910174,欢迎交流!

 

游戏地图编辑器(tileStdio):【上一篇】
卡丁车驾驶指南(道具赛V1.0):【下一篇】
【相关文章】
  • OpenGL
  • OpenGL面面观(一)
  • OpenGL面面观(五)
  • 一个 BMP转ppm/pgm/pbm的程序(bin+source)
  • BMP图像应该注意的一些东西
  • BMP文件格式(英文版二)
  • BMP文件格式(英文原文一)
  • BMP文件格式(英文原文二)
  • OpenGL的扩展机制
  • 路由器aux口连接modem远程接入的配置!
  • 【随机文章】
  • 用c重新编译了yaps,yaw,yat工具
  • arp协议,欺骗攻击,预防内部讲座
  • 重装XP后修复被破坏的MBR
  • 动态地改变数据窗口中的图形的样式
  • Linus 最初开发Linux操作系统内核的主要参考书
  • 软件外包基础--§2 什么是BSE
  • 未来光纤接入技术
  • 使用cosoft.org.cn的cvs
  • Linux 核心--6.进程间通讯机制
  • Windows Socket 1.1库函数概览
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.