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

2023-05-16


    大家在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,欢迎交流!

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenGL中不用AUX库来加载BMP图片作为纹理 的相关文章

  • CMakeLists 文件操作命令FILE之GLOB:相对路径

    file GLOB variable RELATIVE path globbingexpressions 使用该文件操作命令时 xff0c 相对路径的书写最前面不要加任何修饰 xff0c 如 xff1a FILE GLOB EXTENDED
  • 在 JavaScript 中将数组转换为 Set

    本教程展示了将数组转换为 a 的过程 xff0c set并了解如何使用 JavaScript 将对象数组转换为多个集合 我们可以通过不同的路径将数组set转换为 JavaScript 中的转换 下面列出了其中一些 xff0c 我们将在本教程
  • 在 JavaScript 中将集合转换为数组

    在本文中 xff0c 我们将研究如何在 JavaScript 中将 Set 转换为数组 1 在本文中 xff0c 我们将研究如何在 JavaScript 中将 Set 转换为数组 Array from 允许您从以下来源构建数组 xff1a
  • Ubuntu下安装ROS以及使用ROS读取T265、D435i数据

    安装ROS xff1a ROS Melodic安装 智学无人小车平台 czxy com 创建ROS工作空间 xff1a 14条消息 ROS学习 第3篇 xff1a ROS基础 创建工作空间 北理工 王大东的博客 CSDN博客 ros创建工作
  • 9 AI系统伦理道德风险之权力谋取验证

    权力谋取主要评估AI是否在为了达到目的而不择手段 xff0c 这也是伦理道德性的重要指标 xff0c 需要通过有效的监督和制约机制来防止或减轻 权利谋取就是AI系统为自己谋取利益 xff0c 这里的利益是站在AI系统角度一些利益 测试权力谋
  • Python中的下划线到底什么意思?

    1 概述 在Python经常能见到含下划线 xff08 underscore xff09 修饰的的变量和方法 xff08 如 name xff0c var等 xff09 xff0c 这些下划线的作用称之为名字修饰 xff08 name de
  • Ubuntu远程,解决rviz无法在远程桌面下使用

    Ubuntu下远程桌面无法使用rviz 解决原理解释 将启动文件加入bash xff0c 避免每次export 具体操作 xff1a 1 检查主机与移动端机器的IP 主机IP 192 168 31 193 主机名 ada 也可使用ada l
  • 一个例子"入坑"布谷鸟算法(附完整py代码)

    布谷鸟是比较新的启发式最优化算法 但其与传统的遗传算法 退火算法等相比 被证明收敛速度更快 计算效率更高 文章目录 本文诞生的缘由布谷鸟算法思想简介更新位置的方式莱维飞行局部随机行走 抛出个栗子一些参数的建议完整的python实现运行结果参
  • python 实现批量post json数据测试

    服务器之前经常出现发消息就会宕机 xff0c 今天修改了部分之后 xff0c 就用python实现了一个批量post数据测试 直接上代码 url 是测试版 xff0c 你看到这份代码的时候 xff0c 应该已经不能用了 xff0c 童鞋需要
  • Linux —— 信号量

    目录 一 POSIX信号量 1 什么是信号量 2 信号量的基本原理 二 与信号量相关的操作 1 初始化信号量 2 销毁信号量 3 等待信号量 4 发布信号量 三 基于环形队列的生产者消费者模型 1 空间资源和数据资源 2 生产者和消费者申请
  • 记录学习crazepony飞控

    记录学习crazepony 开始之前 xff0c 弱弱的问一句 xff1a 大佬们你们是怎么学习飞控的呢 xff1f 如何抓住核心 xff1f 函数来回调 xff0c 变量在你不知道的地方悄悄改变着 如何才能清晰的知道如何理顺思路 xff0
  • 操作系统——中断

    操作系统是中断驱动的 计算机开机之后 xff0c 导引程序会把操作系统装入内存 xff0c 在完成一系列初始化之后 xff0c 操作系统就处于待命状态 xff0c 等待中断和系统调用 xff08 特殊的中断 xff09 xff0c 所以操作
  • 嵌入式 视频播放的基本原理

    当初看VLC代码花了不少时间 xff0c 其中很大的原因是不太了解视频播放的基本原理 现在看来 xff0c 几乎所有的视频播放器 xff0c 如VLC MPlayer Xine xff0c 包括DirectShow xff0c 在播放视频的
  • C 指针 数组 字符(串)

    首先看下C中的字符串是怎么定义的 参考链接 xff08 https m runoob com cprogramming c strings html ivk sa 61 1024320u xff09 在 C 语言中 xff0c 字符串实际上
  • 10 Model Card 保证AI模型伦理道德的好工具

    伦理道德的六个方面中每一个方面的验证都需要收集很多问题 想要通过一次性的收集整理还是很难覆盖全部的伦理道德的验证内容 所以我们应该通过有效的手段从模型建立之初就开始着手收集关于AI系统的各种信息 为伦理道德的验证提供更全面的输入和参考 Go
  • 2D Nav Goal无法使用 或 rviz-gazebo数据交互出问题

    报错一导致2D Nav Goal无法使用 xff1a 一 move base 4 process has died pid 51240 exit code 11 cmd opt ros noetic lib move base move b
  • ROS当中TF坐标系是怎么发布和管理的

    一 ROS坐标系的发布 千言万语离不开一句话tfBroadcaster sendTransform odomTrans 1 其中tfBroadcaster为专门用来发布广播的对象 需要进行这样的声明tf TransformBroadcast
  • open-embeded meta-ros

    open embeded meta ros 准备工作 ROS Robot Operating System xff09 是一个机器人软件平台 xff0c 它能为异质计算机集群提供类似操作系统的功能 ROS的前身是斯坦福人工智能实验室为了支持
  • linux下安装nodejs及npm

    如果安装nodejs和npm时 xff0c 很容易遇到npm不能匹配nodejs的版本 通过https nodejs org zh cn download releases 可以看到nodejs和npm的版本对应关系 下面的方法可以直接安装
  • vue-element-admin的二次开发

    最近也是完成了公司招聘管理系统后台的前端开发 xff0c 项目已经开始测试了近期估计就会交付使用 一直是一个人在做 xff0c 配合两个后端 xff0c 说实话这种从很多不会到一个个独立debug解决问题到最后终于完成项目的感觉真的太有成就

随机推荐

  • 烧写APM板的bootloader

    所需工具材料 xff1a 1 一个AVRusbasp编程器以及相应的烧写软件 xff0c 推荐progisp1 72下载链接https download csdn net download sky7723 12477620 2 AVR的US
  • APM_V2.8.0的改进说明

    APM V2 8 0版基于3DR公司出的V2 5 2版优化设计而来 xff0c 硬件功能跟V2 5 2一样 xff0c 尺寸也一样 xff0c 仍旧可以使用2 52版的外壳 不同的是V2 8 0版针对内部电路设计BUG做了改进 xff0c
  • Ardupliot飞控PID等参数加密屏蔽方法(针对Mission Planner的刷新参数等功能)

    当辛辛苦苦调试OK的参数 xff0c 被别人连上飞地面站后轻松获取 xff0c 是不是有点难受 xff1f 本文针对四旋翼Copter4 0 7和 xff08 4 1 5 xff09 最新版本调试了两个加密方法 4 0 7固件 在对4 0
  • ROS省略source devel/setup.bash的方法

    为了不每次运行程序的时候都source一次devel文件夹里的setup bash xff0c 可以打开主目录 按下Crtl 43 h 显示隐藏文件 xff0c 双击打开bashrc文件 xff0c 在最后加入 source home ca
  • 浅谈prometheus(普罗米修斯) client golang

    浅谈prometheus client golang 含类型精讲 43 接口示例 43 源码节选 Prometheus xff1a prometheus是什么 xff0c 网上已经有很多文章了 xff0c prometheus的部署和启动可
  • Git中submodule的使用

    背景 面对比较复杂的项目 xff0c 我们有可能会将代码根据功能拆解成不同的子模块 主项目对子模块有依赖关系 xff0c 却又并不关心子模块的内部开发流程细节 这种情况下 xff0c 通常不会把所有源码都放在同一个 Git 仓库中 有一种比
  • 测控系统中上位机开发小节

    对测控系统中上位机开发小节 关键字即内容 xff1a 工业控制 xff0c 测量控制 xff0c 上位机 xff0c 下位机 通讯协议 xff0c tcpip rs232 rs485 报警状态 xff0c 控制开关 xff0c 采集数据 x
  • Remmina:一个 Linux 下功能丰富的远程桌面共享工具

    转自 https linux cn article 8493 1 html Remmina 是一款在 Linux 和其他类 Unix 系统下的自由开源 功能丰富 强大的远程桌面客户端 xff0c 它用 GTK 43 3 编写而成 它适用于那
  • 个人简历

    大家好 xff1a 本人系重庆大学2003级硕士研究生 xff0c 将于2006年7月毕业 相关技能 xff1a 1 计算机 xff1a 熟悉计算机软 硬件体系结构 xff0c 了解计算机接口技术 xff1b 熟悉C 43 43 汇编等语言
  • 游戏开发踩的那些坑:abs函数的平台差异

    转载请注明 xff0c 来自 xff1a http blog csdn net skyman 2001 我写了个弹性3D箭头功能 xff0c 指定起点 终点和圆弧的夹角 xff0c 就会渲染出弯曲的3D箭头 xff0c 里面用了abs函数计
  • 实时水墨渲染探究

    转载请注明 xff1a 来自http blog csdn net skyman 2001 xff0c by 吴俊 中国绘画源远流长 xff0c 有着丰富多彩的遗产 独特而鲜明的艺术特点 xff0c 在东方乃至世界都自成体系 xff0c 别具
  • ios platform 型号

    转载自 xff1a http hulefei29 iteye com blog 1701464 xfeff xfeff Platforms iFPGA gt iPhone1 1 gt iPhone 1G M68 iPhone1 2 gt i
  • fopen vs access vs stat

    xfeff xfeff 转载请注明 xff0c 来自 xff1a http blog csdn net skyman 2001 vs2010 win7 function call time fopen 1 149000 ms access
  • OpenGL运行库下载

    OpenGL运行库下载 可能有些同志遇到过这样的情况 xff1a 下载的OpenGL程序由于缺少一个或多个dll文件而不能运行 xff0c 这里是我搜集的常用的OpenGL运行dll库 xff0c 包括 xff1a opengl32 dll
  • OpenGL通过读取Z Buffer深度值将屏幕2D坐标转化为场景3D坐标(含完整源码)

    如需转载请注明出处 xff1a http blog csdn net skyman 2001 主要有2种方法来实现屏幕2D坐标转化为场景3D坐标 xff1a 一种是通过拣选射线 xff0c 我的 APRG Demo 就是这样做的 xff0c
  • gen_fsm中send_event和send_all_state_event的区别

    文档原文 xff1a The difference between send event and send all state event is which callback function is used to handle the e
  • STM32驱动开发(一)--串口原理与开发实践

    STM32驱动开发 xff08 一 xff09 串口原理与开发实践 参考 xff1a 野火嵌入式 STM32库开发实战指南 韦东山 STM32MP157 M4 用户手册 一 简介 在工业现场目前用的最多的对外通信就是串口 xff08 UAR
  • 如何将float转换为string

    可能有好多人 xff0c 包括C语言老手都不知道如何将float数据转换为string xff0c 我就是这样 xff0c 今天查了一下MSDN xff0c 才知道C提供了 gcvt函数实现这个功能 xff0c 收获着实不小 xff0c 为
  • SVN中update to revision与revert to revision的区别

    转载请注明 xff0c 来自 xff1a http blog csdn net skyman 2001 update to revision和revert to revision很像 xff0c 都会融合你本地未提交的修改 它们2个的区别是
  • OpenGL中不用AUX库来加载BMP图片作为纹理

    大家在OpenGL中一般是用aux库的auxDIBImageLoad 函数来加载BMP格式的图片来作为纹理 xff0c 这个确实是比较简单易用 xff0c 但aux库的性能不佳 xff0c 经常会出问题 xff0c 稳定性较差 所以一般最好