【OpenGL】SOIL(简易的opengl图像库)

本文借鉴:https://www.cnblogs.com/evilkant/p/5947682.html

一、简介

SOIL是简易OpenGL图像库(Simple OpenGL Image Library)的缩写,它支持大多数流行的图像格式,并且使用简单。可从官网下载其源码:http://www.lonesock.net/soil.html

二、配置

从他们的主页可以下载得到一个压缩文件,包括lib文件夹projects文件夹和src文件夹。有三种方案配置SOIL库。

  1. lib文件夹里是一个libSOIL.a文件,这是一个静态库文件(static library file),src文件夹里是一个SOIL.h文件,我们只需要把它们放入工程文件夹中,然后在源文件中包含它们就可以了。

什么是静态库文件呢,首先来说说库,所谓库,本质上就是一些可执行代码的二进制形式,可以被操作系统载入内存执行。库又可以进一步分为静态链接库和动态链接库(dll),静态库会在程序编译时被链接到目标代码中,而动态库在程序运行的过程中才被载入。

      2. 如果libSOIL.a用不了,你可以自己使用projects文件夹里带的解决方案生成库文件,最好是选择VC8里的解决方案(VC9似乎有问题)。打开工程文件,回到VC8文件夹,你会发现多出了一些文件夹,在debug文件夹里你可以看到我们需要的SOIL.lib文件,之后的操作和1一样。

       3. 第二步也可以在projects文件夹中打开makefile文件夹,新建“obj”文件夹,打开terminal --$ cmake .. --$ make -j,就可以在lib文件夹中更新libSOIL.a文件,并在obj中生成一系列中间文件.o,执行--$ install 将当前文件中的libSOIL.a文件复制到系统目录下,详见makefile.txt。

三、使用

#include <SOIL.h>

...

glGenTextures(1, &tex);
glBindTexture(GL_TEXTURE_2D, tex);

//新建两个int值用于存储width\height
int width, height;
/*函数首先需要输入图片文件的路径。然后需要两个int指针作为第二个和第三个参数,SOIL会分别返回图片的宽
度和高度到其中。后面我们在生成纹理的时候会用图像的宽度和高度。第四个参数指定图片的通道(Channel)数
量,但是这里我们只需留为0。最后一个参数告诉SOIL如何来加载图片:我们只关注图片的RGB值。结果会储存为
一个很大的char/byte数组。*/
unsigned char* image = SOIL_load_image(path.c_str(), &width, &height, 0, SOIL_LOAD_RGBA);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0,
GL_RGBA, GL_UNSIGNED_BYTE, image);
glGenerateMipmap(GL_TEXTURE_2D);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_BORDER);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
//生成了纹理和相应的多级渐远纹理后,释放图像的内存并解绑纹理对象
SOIL_free_image_data(image);
glBindTexture(GL_TEXTURE_2D, 0);

猜你喜欢

转载自blog.csdn.net/listen_wq/article/details/81180480