opengl 怎么把一张图片渲染到纹理
时间: 2023-08-04 22:04:01 浏览: 49
首先,需要加载图片并将其转换为纹理。可以使用如下的代码:
```c++
int width, height, channels;
unsigned char* image = stbi_load("image.jpg", &width, &height, &channels, 0);
GLuint textureID;
glGenTextures(1, &textureID);
glBindTexture(GL_TEXTURE_2D, textureID);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
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, image);
glGenerateMipmap(GL_TEXTURE_2D);
stbi_image_free(image);
```
这段代码使用了STB Image库来加载图片,并将其转换为OpenGL中的纹理。接下来,需要在渲染时将纹理绑定到一个纹理单元,并将其传递给着色器进行渲染。可以使用如下的代码:
```c++
glUseProgram(shaderProgram);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, textureID);
glUniform1i(glGetUniformLocation(shaderProgram, "textureSampler"), 0);
// 渲染顶点数据
```
在这段代码中,首先使用glUseProgram函数指定要使用的着色器程序,然后使用glActiveTexture和glBindTexture函数将纹理绑定到纹理单元0,并将其传递给着色器中的textureSampler uniform变量。最后,在渲染时,需要将纹理坐标传递给着色器进行渲染。
希望这个回答对你有帮助!