opengl 多边形绑定纹理
时间: 2023-09-25 21:11:58 浏览: 84
在OpenGL中,可以使用纹理映射(texture mapping)来绘制多边形。下面是一个基本的多边形绑定纹理的过程:
1. 创建纹理对象
使用`glGenTextures`创建一个纹理对象,并使用`glBindTexture`将其绑定到一个纹理目标上(如`GL_TEXTURE_2D`)。
```c++
GLuint texture;
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
```
2. 加载纹理数据
使用`glTexImage2D`或`glTexStorage2D`将纹理数据加载到纹理对象中。
```c++
int width, height, nrChannels;
unsigned char* data = stbi_load("texture.jpg", &width, &height, &nrChannels, 0);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
stbi_image_free(data);
```
在这个例子中,使用了stb_image库加载了一个名为"texture.jpg"的图片作为纹理数据。
3. 设置纹理过滤方式
使用`glTexParameteri`设置纹理的过滤方式。
```c++
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);
```
4. 绑定纹理
在绘制多边形之前,使用`glBindTexture`将纹理对象绑定到纹理单元上。
```c++
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texture);
```
在这个例子中,使用了纹理单元0。
5. 绘制多边形
在绘制多边形时,使用纹理坐标(texture coordinates)来指定纹理在多边形上的位置和方向。
```c++
GLfloat vertices[] = {
// 位置 // 纹理坐标
0.5f, 0.5f, 0.0f, 1.0f, 1.0f, // 右上角
0.5f, -0.5f, 0.0f, 1.0f, 0.0f, // 右下角
-0.5f, -0.5f, 0.0f, 0.0f, 0.0f, // 左下角
-0.5f, 0.5f, 0.0f, 0.0f, 1.0f // 左上角
};
GLuint indices[] = {
0, 1, 3,
1, 2, 3
};
```
在这个例子中,使用了一个矩形。
6. 使用纹理坐标
在顶点着色器中,使用纹理坐标作为输出变量,传递给片段着色器。
```c++
#version 330 core
layout (location = 0) in vec3 aPos;
layout (location = 1) in vec2 aTexCoord;
out vec2 TexCoord;
void main()
{
gl_Position = vec4(aPos, 1.0);
TexCoord = aTexCoord;
}
```
7. 在片段着色器中使用纹理
在片段着色器中,使用`texture`函数获取纹理颜色。
```c++
#version 330 core
out vec4 FragColor;
in vec2 TexCoord;
uniform sampler2D texture1;
void main()
{
FragColor = texture(texture1, TexCoord);
}
```
在这个例子中,使用了一个简单的片段着色器,直接将纹理颜色输出。
完整的多边形绑定纹理的代码示例可以参考以下链接:
https://learnopengl.com/code_viewer.php?code=getting-started/textures-exercise2
阅读全文