opengl左右上下翻转
时间: 2023-12-12 20:33:52 浏览: 158
为了在OpenGL中实现纹理的左右上下翻转,可以使用以下两种方法:
1. 在着色器中对纹理坐标进行翻转
可以在着色器中对纹理坐标进行翻转,从而实现纹理的左右上下翻转。具体来说,可以将纹理坐标的y轴坐标取反,将x轴坐标减去0.5后再乘以-1,即可实现左右翻转。将y轴坐标减去0.5后再乘以-1,即可实现上下翻转。以下是一个简单的示例代码:
```glsl
#version 330 core
out vec4 FragColor;
in vec2 TexCoord;
uniform sampler2D texture1;
void main()
{
vec2 flipped_texcoord = vec2(TexCoord.x - 0.5, 0.5 - TexCoord.y);
FragColor = texture(texture1, flipped_texcoord);
}
```
2. 在加载纹理时对像素数据进行翻转
可以在加载纹理时对像素数据进行翻转,从而实现纹理的左右上下翻转。具体来说,可以使用OpenGL提供的glPixelStorei函数,将GL_UNPACK_FLIP_Y_WEBGL参数设置为GL_TRUE,即可实现上下翻转。将GL_UNPACK_FLIP_Y_WEBGL参数设置为GL_FALSE,即可取消上下翻转。以下是一个简单的示例代码:
```cpp
// 加载纹理
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);
int width, height, nrChannels;
stbi_set_flip_vertically_on_load(true); // 上下翻转
unsigned char *data = stbi_load("texture.jpg", &width, &height, &nrChannels, 0);
if (data)
{
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
glGenerateMipmap(GL_TEXTURE_2D);
}
else
{
std::cout << "Failed to load texture" << std::endl;
}
stbi_image_free(data);
```
阅读全文