0
点赞
收藏
分享

微信扫一扫

【OpenCV】基本纹理映射,纹理平铺效果


【OpenCV】基本纹理映射,纹理平铺效果

  • ​​1.绘制目标​​
  • ​​2.核心代码​​
  • ​​3.运行结果​​

1.绘制目标

2.核心代码

// 处理加载进来的图像
Mat LoadImage(const string& fname, bool bAlpha = true)
{
if (bAlpha)
{
Mat img_bgra = imread(fname, IMREAD_UNCHANGED);
if (img_bgra.empty())
{
cout << "Failed load the image!" << endl;
return img_bgra;
}
flip(img_bgra, img_bgra, 0);
Mat img_rgba;
cvtColor(img_bgra, img_rgba, COLOR_BGRA2RGBA);
return img_rgba;
}
else
{
Mat img_bgr = imread(fname, IMREAD_COLOR);
if (img_bgr.empty())
{
cout << "Failed load the image!" << endl;
return img_bgr;
}
flip(img_bgr, img_bgr, 0);
Mat img_rgb;
cvtColor(img_bgr, img_rgb, COLOR_BGR2RGB);
return img_rgb;
}
}

// 加载外部的纹理图
void LoadExternalTexture()
{
// 加载纹理图
//Mat img_rgba = LoadImage("Brick.jpg", true);
//Mat img_rgba = LoadImage("smile.png", true);
Mat img_rgba = LoadImage("monkey.png", true);

// 绑定纹理图
glBindTexture(GL_TEXTURE_2D, TEXTURE_ID);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, img_rgba.size[1], img_rgba.size[0], 0, GL_RGBA, GL_UNSIGNED_BYTE, img_rgba.data);

// 设置纹理平铺属性
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_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
}

void init() {
glClearColor(1.f, 1.f, 1.f, 0.f);

// 创建纹理图ID
glGenTextures(1, &TEXTURE_ID);

// 加载纹理图
LoadExternalTexture();

// 设置纹理环境
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);

// 开启纹理映射
glEnable(GL_TEXTURE_2D);
}

void NewFunction5_2()
{
glBegin(GL_TRIANGLE_STRIP);
glTexCoord2f(0.5f, 2.f); glVertex2f(-175.f, 175.f);
glTexCoord2f(0.5f, 0.f); glVertex2f(-175.f, -175.f);
glTexCoord2f(1.f, 2.f); glVertex2f(-125.f, 175.f);
glTexCoord2f(1.f, 0.f); glVertex2f(-125.f, -175.f);
glEnd();

glBegin(GL_TRIANGLE_STRIP);
glTexCoord2f(0.f, 2.f); glVertex2f(-125.f, 175.f);
glTexCoord2f(0.0f, 0.f); glVertex2f(-125.f, -175.f);
glTexCoord2f(3.f, 2.f); glVertex2f(175.f, 175.f);
glTexCoord2f(3.f, 0.f); glVertex2f(175.f, -175.f);
glEnd();
}

3.运行结果

【OpenCV】基本纹理映射,纹理平铺效果_纹理映射_02


【OpenCV】基本纹理映射,纹理平铺效果_纹理映射_03


【OpenCV】基本纹理映射,纹理平铺效果_加载_04


举报

相关推荐

0 条评论