需求来自于在学习OPENGL的过程中,纹理这一块内容时需要获取图片信息,而纹理图像可能被储存为各种各样的格式,每种都有自己的数据结构和排列,如DDS、JPG、BMP、PNG等,需要一个图像加载器,所以我们如何才能把这些图像加载到应用中呢?自己写一个图像加载器,把图像转化为字节序列?这样就偏移了OpenG的学习轨道,而SOIL库就是一个非常方便好使的库,它的代码是跨平台的,在Windows,Linux和Mac上都方便使用,使用它我们将对OpenGL的学习更加高效。
SOIL是一个很小的C库,主要用于将纹理上传到OpenGL中。它基于stb_image版本1.16,Sean Barrett的公共域代码(在此处找到)。我已将其扩展为加载TGA和DDS文件,并执行加载OpenGL纹理所需的常用功能。SOIL还可用于以各种格式保存和加载图像(对于加载高度图,非OpenGL应用程序等非常有用)
可读图像格式:
2.可写图像格式:
只需在您的C或C ++文件中包含SOIL.h,在静态库中链接,然后使用任何SOIL的功能。
下载地址: **点击此处**
下载后打开压缩包将src文件夹中的,SOIL.H拷贝进VisualStdio中的VC的include,
VS2015及以上版本选择VC9编译,点生成解决方案,Debug/Release -----x64/win32,至于Debug还是Relase,x64还是win32,跟自己的OpenGl库的配置一样最好,将生成后SOIL.lib放进VS中的VC的lib中,如下图我的位置
然后自己的项目里的属性—>C++—>链接器—>(添加输入:SOIL.lib).好了,接下来我们就可以使用它了。
glGenTextures(1, &texture); glBindTexture(GL_TEXTURE_2D, texture); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); // Set texture wrapping to GL_REPEAT (usually basic wrapping method)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); // Set texture filtering parameters
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); // Load image, create texture and generate mipmaps
使用SOIL库函数功能
int width, height; unsigned char* image = SOIL_load_image("wall.bmp", &width, &height, 0, SOIL_LOAD_RGB); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, image); glGenerateMipmap(GL_TEXTURE_2D);
SOIL_free_image_data(image);
glBindTexture(GL_TEXTURE_2D, 0); // Unbind texture when done, so we won't accidentily mess up our texture.
SOIL_free_image_data(image);
点击进入
链接:https://pan.baidu.com/s/1c2Fc_ebkQC6P4UdqoHUj9A
提取码:x5c8
本文没有介绍OpenGl的知识,关于纹理的相关内容还须自行学习,如OpenGl编程指南,或者网站OGV,
[LearnOpenGL] | |
---|---|
我将在接下来文章介绍纹理的相关知识内容及应用。有问题,还请多多交流,互相学习。