SOIL--简单的OpenGL图像库--的配置使用及纹理的实现

基于SOIL图像库的OpenGL纹理处理

  • SOIL的配置
    • 简介
    • 功能
    • 配置
    • 纹理部分代码
  • 官方网站
  • 配置好的VS2015,X64,Debug版本的
  • 纹理例子
    • 代码下载
      • 点击此处下载
    • 附录

SOIL的配置

需求来自于在学习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应用程序等非常有用)

功能

  • 可读图像格式:

    • BMP - 非1bpp,非RLE(来自stb_image文档)
    • PNG - 非隔行扫描(来自stb_image文档)
    • JPG - JPEG基线(来自stb_image文档)TGA - 灰度或RGB或RGBA或索引,未压缩RLE
    • DDS - DXT1 / 2/3/4/5,未压缩的立方体贴图(尚无法读取3D DDS文件)
    • PSD - (来自stb_image文档)
    • HDR - 转换为LDR,除非加载*HDR *函数(RGBE或RGBdivA或RGBdivA2)

2.可写图像格式:

  • TGA - 未压缩的灰度或RGB或RGBABMP
  • RGB,未压缩DDS - RGB为DXT1,
  • RGBA为DXT5
  1. 可以将图像文件直接加载到2D OpenGL纹理中,可选择执行以下功能:
  • 可以生成新的纹理句柄,或者重用一个指定的句柄
  • 可以自动将图像重新缩放到下一个最大的二次幂大小可以自动创建MIPmaps
  • 可以将RGB值缩放(不是简单地钳位)到NTSC显示器的“安全范围”(这里推荐的是16到235 )
  • 可以在加载时乘以alpha(以获得更正确的混合/合成)
  • 可以垂直翻转图像可以使用内部(非常快!)压缩器压缩和上传任何图像为DXT1或DXT5(如果EXT_texture_compression_s3tc可用)
  • 可以将RGB转换为YCoCg颜色空间(对于DXT5压缩很有用:请参阅NVIDIA的此链接)
  • 如果纹理大于GL_MAX_TEXTURE_SIZE,它将自动缩小纹理可以直接上传DDS文件(DXT1 / 3/5 /未压缩/立方体贴图,有或没有MIPmaps)。注意:直接上传压缩的DDS图像将禁用其他选项(无翻转,无预乘alpha,无重新缩放,不创建MIP地图,不自动缩小尺寸)
  • 可以为GUI元素或启动画面加载rectangluar纹理(需要GL_ARB / EXT / NV_texture_rectangle)可以将RAM中的图像(例如,通过PhysicsFS或类似物)解压缩为OpenGL纹理(与常规2D纹理相同的功能,如上所述)
  • 可以将立方体贴图直接加载到OpenGL纹理中(与上面的常规2D纹理相同)
  • 可以将六个图像文件直接放入OpenGL立方体贴图纹理中
  • 可以拍摄宽度= 6 *高度的单个图像文件(反之亦然),将其拆分为OpenGL立方体贴图纹理
  • 没有外部依赖
  • 跨平台(Windows,* nix,Mac OS X)

配置

只需在您的C或C ++文件中包含SOIL.h,在静态库中链接,然后使用任何SOIL的功能。
下载地址: **点击此处**

SOIL--简单的OpenGL图像库--的配置使用及纹理的实现_第1张图片
下载后打开压缩包将src文件夹中的,SOIL.H拷贝进VisualStdio中的VC的include,
SOIL--简单的OpenGL图像库--的配置使用及纹理的实现_第2张图片

VS2015及以上版本选择VC9编译,点生成解决方案,Debug/Release -----x64/win32,至于Debug还是Relase,x64还是win32,跟自己的OpenGl库的配置一样最好,将生成后SOIL.lib放进VS中的VC的lib中,如下图我的位置
SOIL--简单的OpenGL图像库--的配置使用及纹理的实现_第3张图片

然后自己的项目里的属性—>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);

官方网站

点击进入

配置好的VS2015,X64,Debug版本的

链接:https://pan.baidu.com/s/1c2Fc_ebkQC6P4UdqoHUj9A
提取码:x5c8

纹理例子

SOIL--简单的OpenGL图像库--的配置使用及纹理的实现_第4张图片

代码下载

点击此处下载

附录

本文没有介绍OpenGl的知识,关于纹理的相关内容还须自行学习,如OpenGl编程指南,或者网站OGV,

[LearnOpenGL]

我将在接下来文章介绍纹理的相关知识内容及应用。有问题,还请多多交流,互相学习。

你可能感兴趣的:(OpenGL,OpenGl,SOIL图像库,纹理)