opengl使用stb_image.h读入材质
时间: 2023-07-30 19:07:03 浏览: 122
使用 stb_image.h 库读取材质可以让我们很方便地加载各种格式的图片,这里以 OpenGL 中的纹理为例进行说明。首先需要下载 stb_image.h 库,并将其添加到项目中。
使用 stb_image.h 加载纹理的一般步骤如下:
1. 使用 `glGenTextures` 函数生成一个纹理 ID。
2. 使用 `glBindTexture` 函数将纹理 ID 绑定到目标纹理类型上,例如 `GL_TEXTURE_2D`。
3. 使用 `stbi_load` 函数加载图片数据,并获取图片的宽度、高度和颜色通道数。
4. 使用 `glTexImage2D` 函数将图片数据传递给 OpenGL,生成纹理。
5. 使用 `glTexParameteri` 函数设置纹理的参数,例如过滤方式和环绕方式。
6. 释放图片数据。
加载纹理的代码示例如下:
```c++
// 读取图片
int width, height, nrChannels;
unsigned char *data = stbi_load("texture.jpg", &width, &height, &nrChannels, 0);
// 创建纹理对象
unsigned int texture;
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
// 设置纹理参数
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
// 生成纹理
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
glGenerateMipmap(GL_TEXTURE_2D);
// 释放图片数据
stbi_image_free(data);
```
注意:在使用 stb_image.h 加载纹理时,需要将图片的 y 轴翻转,否则加载出来的纹理会是倒置的。可以通过设置 `stbi_set_flip_vertically_on_load(true)` 来实现自动翻转。
阅读全文