[OpenCV] Basic texture mapping to achieve texture mapping effects

[OpenCV] Basic texture mapping to achieve texture mapping effects

1. Draw a goal

  1. To practice basic texture mapping, please achieve the following texture mapping effects.
    Insert picture description here

2. Core code

// 处理加载进来的图像
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_1()
{
    
    
	glBegin(GL_TRIANGLE_STRIP);
	glTexCoord2f(0.f, 1.f); glVertex2f(-160.f, 150.f);
	glTexCoord2f(0.f, 0.f); glVertex2f(-160.f, -150.f);
	glTexCoord2f(0.5f, 1.f); glVertex2f(0.f, 150.f);
	glTexCoord2f(1.0f, 0.f); glVertex2f(120.f, -150.f);
	glTexCoord2f(1.f, 0.5f); glVertex2f(160.f, 0.f);
	glEnd();
}

3. Run results

Insert picture description here
Insert picture description here
Insert picture description here

Guess you like

Origin blog.csdn.net/Gyangxixi/article/details/115308040